105 votes

"La ligne contient un octet NULL" dans le lecteur de CSV (Python)

Je suis en train d'essayer d'écrire un programme qui regarde un fichier .CSV (input.csv) et réécrit uniquement les lignes qui commencent par un certain élément (corrected.csv), tel que listé dans un fichier texte (output.txt).

Voici à quoi ressemble mon programme actuellement :

import csv

lines = []
with open('output.txt','r') as f:
    for line in f.readlines():
        lines.append(line[:-1])

with open('corrected.csv','w') as correct:
    writer = csv.writer(correct, dialect = 'excel')
    with open('input.csv', 'r') as mycsv:
        reader = csv.reader(mycsv)
        for row in reader:
            if row[0] not in lines:
                writer.writerow(row)

Malheureusement, je continue à obtenir cette erreur, et je n'ai aucune idée de ce qu'il s'agit.

Traceback (most recent call last):
  File "C:\Python32\Sample Program\csvParser.py", line 12, in 
    for row in reader:
_csv.Error: line contains NULL byte

Crédit à toutes les personnes ici qui m'ont même permis d'arriver à ce point.

1voto

Pandas.read_csv gère désormais les différentes codages UTF lors de la lecture/écriture et peut donc traiter directement les octets nuls

data = pd.read_csv(file, encoding='utf-16')

voir https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

1voto

David Hoelzer Points 269

Ceci est depuis longtemps résolu, mais je suis tombé sur cette réponse parce que je rencontrais une erreur inattendue en lisant un CSV à traiter comme données d'entraînement dans Keras et TensorFlow.

Dans mon cas, le problème était beaucoup plus simple, et il vaut la peine d'en être conscient. Les données produites dans le CSV n'étaient pas cohérentes, ce qui a entraîné l'absence de certaines colonnes, ce qui semble également provoquer cette erreur.

La leçon : Si vous rencontrez cette erreur, vérifiez que vos données ressemblent à ce que vous pensez qu'elles sont !

0voto

Mourad Points 55

Cette erreur semble avoir été corrigée dans la dernière version de Python, en utilisant Python 3.11.3 je n'obtiens plus l'erreur. https://github.com/python/cpython/pull/28808

-1voto

JQTs Points 46

Les informations ci-dessus sont géniales. Pour ma part, j'ai eu la même erreur. Ma solution était simple et venait simplement de moi. Il suffit d'enregistrer le fichier en tant que fichier csv et non en tant que fichier excel.

-2voto

nitish gupta Points 1

C'est très simple.

ne créez pas un fichier csv en "créant un nouvel excel" ou en sauvegardant comme ".csv" depuis windows.

importe simplement le module csv, écris un fichier csv fictif, puis collez vos données dedans.

le fichier csv généré par le module csv de python ne montrera plus d'erreur d'encodage ou de ligne vide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X