[python] lecture csv :line contains NULL byte
cedric1989
Messages postés
261
Date d'inscription
Statut
Membre
Dernière intervention
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je possède une ceintaine de fichier csv, et je dois faire un script permettant d'effectuer rapidement des opération sur ces fichiers.
Le format ressemble à du csv, avec tabulation comme séparateur.
Le problème c'est que quand j'execture le script la :
ça ne peut lire que les première lignes, voici ce que ça affiche :
>>>
['ligne1']
['ligne2']
['ligne3']
['ligne4']
[]
Traceback (most recent call last):
File "G:\ecole\ArcelorMittal\projets\projet02(dataPilote)\script perso\scriptPy.py", line 17, in <module>
for line in csv.reader(open(fileName2,"rb"), dialect = csv.excel_tab):
Error: line contains NULL byte
Au début je pensait que ce n'était pas vraiment du csv, donc je l'ai ouvert avec excel, et enregistré en csv, mais le problème était toujours le même. Quelqu'un sait ce que je pourrai faire ?
Merci d'avance
Je possède une ceintaine de fichier csv, et je dois faire un script permettant d'effectuer rapidement des opération sur ces fichiers.
Le format ressemble à du csv, avec tabulation comme séparateur.
Le problème c'est que quand j'execture le script la :
for line in csv.reader(open(fileName,"rb"), dialect = csv.excel_tab): print line
ça ne peut lire que les première lignes, voici ce que ça affiche :
>>>
['ligne1']
['ligne2']
['ligne3']
['ligne4']
[]
Traceback (most recent call last):
File "G:\ecole\ArcelorMittal\projets\projet02(dataPilote)\script perso\scriptPy.py", line 17, in <module>
for line in csv.reader(open(fileName2,"rb"), dialect = csv.excel_tab):
Error: line contains NULL byte
Au début je pensait que ce n'était pas vraiment du csv, donc je l'ai ouvert avec excel, et enregistré en csv, mais le problème était toujours le même. Quelqu'un sait ce que je pourrai faire ?
Merci d'avance
A voir également:
- Python line contains nul
- Citizen code python avis - Accueil - Outils
- Local-part of envelope rcpt address contains utf8 but remote server did not offer smtputf8 - Forum Mail
- Python pix ✓ - Forum Python
- Line vty ✓ - Forum CISCO
- Mot secret python pix ✓ - Forum Python
10 réponses
c'est pas du vrai csv, ç'est juste que ça ressemble.
Ben alors c'est normal que le module CSV plante, non ?
Ou alors il faudrait faire un pré-traitement avant de le donner à manger au module CSV.
On ne peut pas t'aider tant qu'on ne connaît pas les particularités de ton fichier.
Ben alors c'est normal que le module CSV plante, non ?
Ou alors il faudrait faire un pré-traitement avant de le donner à manger au module CSV.
On ne peut pas t'aider tant qu'on ne connaît pas les particularités de ton fichier.
Difficile à dire sans le fichier: tu pourrais m'envoyer une copie du fichier (ou une partie) qui fait planter le code ?
csv c'est du texte, est ce que l'ouvrir avec open(fileName,"r") sans le b pour binaire change quelque chose ?
Non parce que mon fichier est en binaire, mais c'est pas du vrai csv, ç'est juste que ça ressemble.
Je me suis trompé quand j'ouvre mon fichier avec excel, et que je le converti en csv, la ca fonctionne avec open(fileName,"r"), mais le problème c'est que si je fait ca, je vais devoir ouvrire plus de 100 fichiers avec excel et les reconvertir, c'est assez lourd à faire, le but de mon programme doit tout faire lui même une fois qu'il est lancé et qu'il a récuperé la liste des fichiers.
Par contre quand je l'ouvre avec csv.reader(open(fileName,"rb"), dialect = csv.excel_tab), ça marche jusqu'à arrivé à la ligne qui n'est censé rien contenir.
sebsauvage c'est sympa de vouloir m'aider, mais le problème c'est que j'ai pas l'autorisation d'envoyé mon fichier, sinon je vais voir si je peux pas en faire un du même style qui déclenche le même problème.
Je me suis trompé quand j'ouvre mon fichier avec excel, et que je le converti en csv, la ca fonctionne avec open(fileName,"r"), mais le problème c'est que si je fait ca, je vais devoir ouvrire plus de 100 fichiers avec excel et les reconvertir, c'est assez lourd à faire, le but de mon programme doit tout faire lui même une fois qu'il est lancé et qu'il a récuperé la liste des fichiers.
Par contre quand je l'ouvre avec csv.reader(open(fileName,"rb"), dialect = csv.excel_tab), ça marche jusqu'à arrivé à la ligne qui n'est censé rien contenir.
sebsauvage c'est sympa de vouloir m'aider, mais le problème c'est que j'ai pas l'autorisation d'envoyé mon fichier, sinon je vais voir si je peux pas en faire un du même style qui déclenche le même problème.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si le fichier contient des octets de valeur zéro, c'est anormal et ça fera planter le module CSV.
On peut faire un peu bourrin et remplacer ces octets de valeur zéro par un espace.
Ensuite, ça coule tout seul dans le module CSV (il y aura juste à filtrer les lignes qui ne t'intéressent pas):
Attention: ça charger tout le fichier en mémoire d'un coup. Il faudra donc procéder autrement si le fichier est vraiment gros.
On peut faire un peu bourrin et remplacer ces octets de valeur zéro par un espace.
Ensuite, ça coule tout seul dans le module CSV (il y aura juste à filtrer les lignes qui ne t'intéressent pas):
import StringIO,csv data = open("monfichier.dat","rb").read().replace("\0"," ") file = StringIO.StringIO(data) for line in csv.reader(file, dialect = csv.excel_tab): print line
Attention: ça charger tout le fichier en mémoire d'un coup. Il faudra donc procéder autrement si le fichier est vraiment gros.
Oui il y en a un à la ligne 6:
Notepads++ m'affiche :
0NUL
(NUL surligné, et aprés d'autre caractère)
Mais quand je fait copier coller de la ligne, il s'arrête au 0, donc il doit y avec un \0, mais dans ce cas ça veut dire que je pourrai pas lire mon fichier ?
Notepads++ m'affiche :
0NUL
(NUL surligné, et aprés d'autre caractère)
Mais quand je fait copier coller de la ligne, il s'arrête au 0, donc il doit y avec un \0, mais dans ce cas ça veut dire que je pourrai pas lire mon fichier ?
donc il doit y avec un \0
Il y en a plusieurs.
L'appli qui génère ce CSV est foireuse.
mais dans ce cas ça veut dire que je pourrai pas lire mon fichier ?
Si, avec l'astuce que j'ai donnée.
Il y en a plusieurs.
L'appli qui génère ce CSV est foireuse.
mais dans ce cas ça veut dire que je pourrai pas lire mon fichier ?
Si, avec l'astuce que j'ai donnée.