2017-10-19 15 views
1

Je lis un fichier CSV de 1 Go par blocs de 10 000 lignes. Le fichier a 1106012 lignes et 171 colonnes, autre fichier de plus petite taille ne montre aucune erreur et termine avec succès, mais quand je lis ce fichier de 1 Go, il montre à chaque fois sur le numéro de ligne exactement 1106011 qui est une deuxième ligne de peut manuellement enlever cette ligne mais ce n'est pas la solution parce que j'ai des centaines d'autres fichiers de cette même taille et je ne peux pas corriger toutes les lignes manuellement. Quelqu'un peut-il m'aider avec cela s'il vous plaît. J'appelle cette fonction dans une boucle et fonctionne très bien.Pandas Python: Erreur de segmentation des données. Erreur C: EOF à l'intérieur d'une chaîne commençant lors de la lecture d'un fichier CSV de 1 Go

huge_chunk_return = extract_csv_to_sql(huge_input_filename, huge_header_row, the_size_of_chunk_H, each_Row_H) 

Je lis ce Pandas ParserError EOF character when reading multiple csv files to HDF5, ce read_csv() & EOF character in string cause parsing issue et ce https://github.com/pandas-dev/pandas/issues/11654 et beaucoup d'autres et ont essayé d'inclure le paramètre read_csv tels que

engine='python'

quoting=csv.QUOTE_NONE // Hangs and even the python shell, don't know why

encoding='utf-8'

, mais rien de tout cela a fonctionné, le jetant encore l'erreur suivante

Erreur:

Traceback (most recent call last): 
    File "C:\Users\WCan\Desktop\wcan_new_python\pandas_test_3.py", line 115, in <module> 
    huge_chunk_return = extract_csv_to_sql(huge_input_filename, huge_header_row, the_size_of_chunk_H, each_Row_H) 
    File "C:\Users\WCan\Desktop\wcan_new_python\pandas_test_3.py", line 24, in extract_csv_to_sql 
    sep=',') 
    File "C:\Users\WCan\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\parsers.py", line 655, in parser_f 
    return _read(filepath_or_buffer, kwds) 
    File "C:\Users\WCan\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\parsers.py", line 411, in _read 
    data = parser.read(nrows) 
    File "C:\Users\WCan\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\parsers.py", line 1005, in read 
    ret = self._engine.read(nrows) 
    File "C:\Users\WCan\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\parsers.py", line 1748, in read 
    data = self._reader.read(nrows) 
    File "pandas\_libs\parsers.pyx", line 893, in pandas._libs.parsers.TextReader.read (pandas\_libs\parsers.c:10885) 
    File "pandas\_libs\parsers.pyx", line 966, in pandas._libs.parsers.TextReader._read_rows (pandas\_libs\parsers.c:11884) 
    File "pandas\_libs\parsers.pyx", line 953, in pandas._libs.parsers.TextReader._tokenize_rows (pandas\_libs\parsers.c:11755) 
    File "pandas\_libs\parsers.pyx", line 2184, in pandas._libs.parsers.raise_parser_error (pandas\_libs\parsers.c:28765) 
pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line 1106011 
>>> 
+0

pouvez-vous nous montrer une valide ligne et la ligne invalide (la deuxième dernière que vous avez supprimé) – Indent

+0

Je ne peux pas le coller ici, il a 171 colonnes et il ressemble à la ligne normale mais quand pandas géants est la lecture, il jette l'erreur mentionnée ci-dessus sur la deuxième dernière ligne du fichier. – Wcan

Répondre

3

Si vous êtes sous Linux, essayez de supprimer tous les caractères non imprimables. Essayez de charger votre fichier après cette opération.

tr -dc '[:print:]\n' <file> newfile 
+0

Je suis sous Windows – Wcan

+0

puis-je encore faire ça? – Wcan

+0

https://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python (vous pouvez essayer cette solution) – Indent