2012-05-12 28 views
32

¿Es fácil leer una línea de un archivo de texto comprimido en gz usando python sin extraer el archivo por completo? Tengo un archivo text.gz que tiene 200mb de aroud. Cuando lo extraigo, se convierte en 7.4 gb. Y este no es el único archivo que tengo que leer. Para el proceso total, tengo que leer 10 archivos. Aunque este será un trabajo secuencial, creo que será inteligente hacerlo sin extarctuar toda la información. Ni siquiera sé que es posible. ¿Cómo se puede hacer usando Python? Necesito leer un archivo de texto línea por línea.python: leer líneas de archivos de texto comprimido

Respuesta

38

Puede usar el módulo gzip estándar en python. Simplemente use:

gzip.open('myfile.gz') 

para abrir el archivo como cualquier otro archivo y leer sus líneas.

Más información aquí: Python gzip module

+0

Por curiosidad, ¿esto carga todo el archivo en la memoria? ¿O es lo suficientemente inteligente como para cargar líneas según sea necesario? –

+1

@Sachin_ruk esto no carga el archivo solo lo abre. Para poder cargar los datos del archivo, debe hacer '' 'f.readline()' 'para leer la línea a la vez. O '' f.readlines (N) '' donde '' N'' es el número de líneas que desea leer. – Tom

22

Usando gzip.GzipFile:

import gzip 

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

Nota : para python3 tiene que especificar el archivo que se abrirá en 'rt', como 'r' por defecto a la lectura binaria, o de lo contrario, use line.decode(...).

Nota : gzip.open(filename, mode) es un alias de gzip.GzipFile(filename, mode). Prefiero el primero, ya que se parece al with open(...) as f: utilizado para abrir archivos sin comprimir.

+18

Para python3, debe especificar el archivo que se abrirá en 'rt', ya que 'r' se establece por defecto en lectura binaria. – kap

+1

o use 'line.decode()' – dmeu

Cuestiones relacionadas