2012-05-12 36 views
32

Có dễ đọc một dòng từ tệp văn bản được nén gz bằng python mà không giải nén tệp hoàn toàn không? Tôi có một tập tin text.gz đó là aroud 200mb. Khi tôi giải nén nó, nó sẽ trở thành 7.4gb. Và đây không phải là tập tin duy nhất tôi phải đọc. Đối với toàn bộ quá trình, tôi phải đọc 10 tập tin. Mặc dù đây sẽ là một công việc tuần tự, tôi nghĩ rằng nó sẽ là một điều thông minh để làm điều đó mà không cần trục xuất toàn bộ thông tin. Tôi thậm chí không biết rằng điều đó là có thể. Làm thế nào nó có thể được thực hiện bằng cách sử dụng python? Tôi cần đọc một tập tin văn bản theo từng dòng.python: đọc các dòng từ các tệp văn bản được nén

Trả lời

38

Bạn có thể sử dụng mô-đun gzip chuẩn trong python. Chỉ cần sử dụng:

gzip.open('myfile.gz') 

để mở tệp dưới dạng bất kỳ tệp nào khác và đọc dòng của tệp.

biết thêm thông tin ở đây: Python gzip module

+0

hết mức độ tò mò để tải toàn bộ tệp này vào bộ nhớ? Hoặc là nó đủ thông minh để tải dòng khi cần thiết? –

+1

@Sachin_ruk điều này không tải tập tin nó chỉ cần mở nó. Để thực sự tải dữ liệu từ tập tin bạn cần làm '' 'f.readline()' 'để đọc dòng tại một thời điểm. Hoặc '' f.readlines (N) '' trong đó '' N'' là số dòng bạn muốn đọc. – Tom

22

Sử dụng gzip.GzipFile:

import gzip 

with gzip.open('input.gz','r') as f: 
    for line in f: 
     print('got line', line) 

Note : cho python3 bạn đã xác định tập tin sẽ được mở trong 'rt', như 'r' mặc định để đọc nhị phân, hoặc nếu không hãy sử dụng line.decode(...).

Lưu ý : gzip.open(filename, mode) là bí danh cho gzip.GzipFile(filename, mode). Tôi thích cái cũ hơn, vì nó trông giống như with open(...) as f: được sử dụng để mở các tập tin không nén.

+18

Đối với python3 bạn phải chỉ định tệp sẽ được mở trong 'rt', như 'r' mặc định để đọc nhị phân. – kap

+1

hoặc sử dụng 'line.decode()' – dmeu

Các vấn đề liên quan