Comment puis-je lire tar.gz fichier à l'aide de pandas read_csv avec la compression gzip option?
J'ai une question très simple csv, avec les données suivantes, comprimé à l'intérieur de la tar.gz fichier. J'ai besoin de lire que dans dataframe à l'aide de pandas.read_csv.
A B
0 1 4
1 2 5
2 3 6
import pandas as pd
pd.read_csv("sample.tar.gz",compression='gzip')
Cependant, j'obtiens l'erreur:
CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2
Suivantes sont l'ensemble des read_csv commandes et les différentes erreurs que j'obtiens avec eux:
pd.read_csv("sample.tar.gz",compression='gzip', engine='python')
Error: line contains NULL byte
pd.read_csv("sample.tar.gz",compression='gzip', header=0)
CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2
pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ")
CParserError: Error tokenizing data. C error: Expected 2 fields in line 94, saw 14
pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ", engine='python')
Error: line contains NULL byte
Ce qui ne va pas ici? Comment puis-je résoudre ce problème?
'.gz'
fichier n'est pas la même que'.tar.gz'
- Ok, alors, que dois-je faire pour lire les tar.gz fichier sans le décompresser?
- Si c'est un fichier unique, pourquoi êtes-vous
tar
-ing-il? Pourquoi ne pas simplementgzip
il? De cette façon, vous pouvez utiliser la mp.read_csv() directement. - Je ne suis pas tar-ing-il. Il est donné et je ne peux pas décompresser le fichier d'origine que ce n'est plus que de 100 GO.
- Le fichier est ici... ghtstorage.blob.core.windows.net/downloads/...
- Veuillez informer!
- Si vous avez manuellement dézipper/décompresser et essayer de lire la réelle fichier CSV, ça fonctionne?
- Oui, ça marche. Mais, j'ai besoin de le faire à travers un programme en Python!
- Non, je veux dire, si vous dézipper/décompresser et essayez d'utiliser
read_csv
sur le fichier CSV, au lieu d'essayer de les pandas ne la décompression. - Oui, il a travaillé avec de véritables fichier CSV.
Vous devez vous connecter pour publier un commentaire.
Remarque:
error_bad_lines=False
ignore la délinquance lignes.error_bad_lines=False
et tout à l'heure remarqué sep est une chaîne vide. Pouvez-vous essayer de nouveau avec la mise à jour de réponseerror_bad_lines
sera juste cause à sauter des lignes avec des erreurs, de sorte que le résultat peut être manque quelques lignes. Ces erreurs peuvent indiquer une erreur dans le fichier de données.Vous pouvez utiliser le
tarfile
module pour lire un fichier particulier à partir de la tar.gz archive (comme discuté dans ce problème est réglé).Si il n'y a qu'un seul fichier dans l'archive, vous pouvez le faire:
Le mode de lecture
r:*
gère le gz extension (ou d'autres types de compression) de manière appropriée. Si il y a plusieurs fichiers dans la zippé fichier tar, alors vous pourriez faire quelque chose commecsv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1]
ligne pour obtenir le dernier fichier csv dans le dossier archivé.