2012-05-12 2 views
32

Легко ли читать строку из сжатого gz текстового файла с использованием python без полного извлечения файла? У меня есть файл text.gz, который составляет 200 мб. Когда я извлекаю его, он становится 7.4gb. И это не единственный файл, который я должен прочитать. Для всего процесса я должен прочитать 10 файлов. Хотя это будет последовательная работа, я думаю, что это будет разумная вещь, чтобы не делать этого, не раскрывая всю информацию. Я даже не знаю, что это возможно. Как это можно сделать с помощью python? Мне нужно прочитать текстовый файл по очереди.python: чтение строк из сжатых текстовых файлов

ответ

38

Вы можете использовать стандартный модуль gzip в python. Просто используйте:

gzip.open('myfile.gz') 

, чтобы открыть файл как и любой другой файл и его строки.

Более подробная информация здесь: Python gzip module

+0

Из любопытства загружает весь файл в память? Или он достаточно умен, чтобы загружать строки по мере необходимости? –

+1

@Sachin_ruk это не загружает файл, который он просто открывает. Чтобы действительно загружать данные из файла, вам нужно '' 'f.readline()' 'читать строку за раз. Или '' f.readlines (N) '' где '' N '' - количество строк, которые вы хотите прочитать. – Tom

22

Использование gzip.GzipFile:

import gzip 

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

Примечание : для Python3 вы должны указать файл, который будет открыт в 'rt' как 'r' по умолчанию для бинарного чтения или в противном случае используйте line.decode(...).

Примечание : gzip.open(filename, mode) - это псевдоним для gzip.GzipFile(filename, mode). Я предпочитаю первый, так как он похож на with open(...) as f:, используемый для открытия несжатых файлов.

+18

Для python3 вы должны указать файл, который нужно открыть в 'rt', так как 'r' по умолчанию используется для двоичного чтения. – kap

+1

или используйте 'line.decode()' – dmeu

Смежные вопросы