Tengo un montón de archivos CSV con gzip que me gustaría abrir para su inspección usando el lector CSV incorporado en Python. Me gustaría hacer esto sin tener que primero descomprimirlos manualmente en el disco. Supongo que de alguna manera quiero obtener una secuencia de los datos sin comprimir, y pasar esto al lector CSV. ¿Es esto posible en Python?Uso de csvreader contra un archivo comprimido en Python
Respuesta
utilizar el módulo gzip
:
with gzip.open(filename) as f:
reader = csv.reader(f)
#...
Si 'filename = 'tzaman.csv'' luego hace que el archivo' tzaman.csv' que es un archivo de almacenamiento, y contiene otro archivo 'tzaman.csv' que en realidad es un archivo csv. si lo llamamos 'abc.zip', entonces agrega' abc.zip' que es un zip y contiene un archivo 'abc.zip' que en realidad es un csv. ¿Qué hacer? – Clayton
¿No comprime el archivo? – Clayton
No crea un archivo. Gzip es solo un compresor de flujo. El nombre del archivo se debe llamar 'tzsman.csv.gz' para ayudar a identificar el tipo de archivo. Además, la biblioteca gzip no admite la instrucción with en Python 2.6.8. – Doug
una solución más completa:
import csv, gzip
class GZipCSVReader:
def __init__(self, filename):
self.gzfile = gzip.open(filename)
self.reader = csv.DictReader(self.gzfile)
def next(self):
return self.reader.next()
def close(self):
self.gzfile.close()
def __iter__(self):
return self.reader.__iter__()
ahora se puede utilizar de esta manera:
r = GZipCSVReader('my.csv')
for map in r:
for k,v in map:
print k,v
r.close()
aseado. Más fácil si puede agregar '__enter _/__ exit __()' métodos de gestor de contexto para que pueda usarse con la instrucción 'with'. – smci
He probado la versión anterior para escribir y leer, y no funcionó en Python 3.3 debido a un error de "bytes". Sin embargo, después de un poco de prueba y error, pude hacer que funcionara lo siguiente. Tal vez también ayuda a los demás:
import csv
import gzip
import io
with gzip.open("test.gz", "w") as file:
writer = csv.writer(io.TextIOWrapper(file, newline="", write_through=True))
writer.writerow([1, 2, 3])
writer.writerow([4, 5, 6])
with gzip.open("test.gz", "r") as file:
reader = csv.reader(io.TextIOWrapper(file, newline=""))
print(list(reader))
Como amohr indica, las siguientes obras, así:
import gzip, csv
with gzip.open("test.gz", "wt", newline="") as file:
writer = csv.writer(file)
writer.writerow([1, 2, 3])
writer.writerow([4, 5, 6])
with gzip.open("test.gz", "rt", newline="") as file:
reader = csv.reader(file)
print(list(reader))
@Gerenuk ¡funciona como un encanto! – ZuLu
Esta solución también funciona con el 'io.BufferedReader' que podría ser más rápido según algunos [puntos de referencia] (http://ebnj.net/pythongzipbenchmarks/). Simplemente envuelva 'gzip.open' con' io.BufferedReader' haciéndolo 'con io.BufferedReader (gzip.open (" test.gz ", 'r')) como archivo:' –
, puede omitir TextIOWrapper/BufferedReader si usa gzip.open (mode = 'rt' – amohr
- 1. Establecer permisos en un archivo comprimido en python
- 2. ¿Cómo crear un archivo tar completamente comprimido usando Python?
- 3. Actualización de un único archivo en un archivo comprimido tar
- 4. usando sed en un archivo comprimido
- 5. CSVReader y InputStream
- 6. Cómo validar xml contra un archivo DTD en Python
- 7. Lea un archivo grande de texto comprimido línea por línea en python
- 8. Ruby: Crear un archivo comprimido Gzipped
- 9. Crear un archivo comprimido cifrado con PHP
- 10. ¿Cómo puedo ver un archivo comprimido contenido
- 11. Cómo comprimir un directorio en un archivo comprimido programáticamente
- 12. encontrar cadena dentro de un archivo comprimido en una carpeta
- 13. ¿Cómo saber si un archivo está comprimido gzip?
- 14. ¿Cómo puedo extraer un archivo comprimido en Perl?
- 15. Extracción del contenido del archivo comprimido a un directorio específico en Python 2.7
- 16. ¿Archivo comprimido con seguridad de contraseña?
- 17. datos binarios en la base de datos, blob contra comprimido base64
- 18. python: leer líneas de archivos de texto comprimido
- 19. SharpZipLib: La compresión de un único archivo en un único archivo comprimido
- 20. ¿Cómo validar un archivo xml contra un esquema XSD utilizando la biblioteca de Amara en Python?
- 21. Subversion diff para el archivo xml comprimido
- 22. clojure: descomprimir un archivo comprimido almacenado como recurso
- 23. ¿Cómo comprobar si un archivo está comprimido gzip?
- 24. Rails 3: ¿Cómo puedo generar un archivo comprimido bajo pedido?
- 25. uso del archivo disperso en Python
- 26. Uso CollectionAssert.Contains contra una colección
- 27. suma de Python contra Numpy.sum de NumPy
- 28. ¿Cómo puedo comprimir una carpeta y enviar por correo electrónico el archivo comprimido en Python?
- 29. Gestionar contenido comprimido en Android
- 30. imprimiendo a un archivo en Python: redirigir contra el argumento de archivo de impresión frente a escribir
Además de las soluciones nativas de Python aquí, 'paquete pandas' tiene [' read_csv'] (https : //pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) reader con compatibilidad gzip – smci