J'ai besoin de lire un fichier CSV en python.
Depuis pour la dernière ligne, je reçois une erreur "Null d'octet" que je voudrais éviter d'utiliser pour mot clé mais le moment. P>
Savez-vous Comment faire cela? p> Je veux remplacer la boucle de la boucle de temps afin que je puisse vérifier si la ligne est nulle ou non. P> Quelle est la fonction de lecture d'une seule ligne dans le module CSV?
Merci p> merci p> P.s. sous la trace de trace p>
8 Réponses :
Pas vraiment sûr de ce que vous voulez dire, mais vous pouvez toujours vérifier l'existence avec si Si ce n'est pas ce que vous voulez, vous devez décrire votre problème plus clairement en montrant des exemples de choses Cela ne fonctionne pas pour vous, y compris le format de fichier d'échantillon et la sortie souhaitée que vous souhaitez. p> p>
La communauté de Django a adressé aux problèmes d'importation de Python CSV. Cela vaut donc la peine d'être Recherche d'importation de CSV là-bas ou de poster une question. En outre, vous pouvez modifier la ligne d'incrimination directement dans le fichier CSV avant d'essayer l'importation. P>
Peut-être que vous pourriez attraper l'exception soulevée par le lecteur CSV. Quelque chose comme ceci: ou vous pouvez utiliser suivant () code>: p>
Salut Pedro! Super! C'est ce que je cherchais! Afg
Vous ne pouvez pas attraper cette exception (testez-le).
@Pedro: Qu'est-ce que @ Telliott99 signifie (si je le canalisais correctement) est que vous devez faire importer _csv code> puis sauf _csv.error: code>
Ah ...
@ Tellot99: Qu'est-ce que "ne semble pas fonctionner" ?? Afficher le code qui démontre "ne pouvait pas attraper l'exception". Si vous rencontrez des difficultés, essayez de poser une question distincte!
Weird: quand j'utilise la solution suivante () code> solution, j'obtiens attributError: "_csv.reader 'objet n'a aucun attribut" suivant " code>. Qu'est-ce que cela pourrait signifier?
Si votre problème est spécifique à la dernière ligne étant vide, vous pouvez utiliser NUMPY.GENFROMTXT (ou l'ancien MATPLOLIB.MLAB.CSV2REC)
$: cat >csv_file.txt
foo,bar,baz
yes,no,0
x,y,z
$:
$: ipython
>>> from numpy import genfromtxt
>>> genfromtxt("csv_file.txt", dtype=None, delimiter=',')
array([['foo', 'bar', 'baz'],
['yes', 'no', '0'],
['x', 'y', 'z']],
dtype='|S3')
Vous avez besoin (toujours) de dire exactement quel est le message d'erreur que vous avez obtenu. Veuillez éditer votre question.
Probablement ceci: p>
>>> import csv; csv.reader("\x00").next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_csv.Error: line contains NULL byte
>>>
Salut! Vous avez raison! Par souci de clarté, j'ai ajouté ma question avec la trace. J'ai résolu à la fin avec un essai / à l'exception de la solutoin
Je n'ai pas de réponse, mais je peux confirmer le problème et que la plupart des réponses publiées ne fonctionnent pas. Vous ne pouvez pas attraper cette exception. Vous ne pouvez pas tester pour si la ligne code>. Peut-être que vous pourriez vérifier directement l'octet nul, mais je ne suis pas suffisamment rapide pour le faire ... Si c'est toujours sur la dernière ligne, vous pouvez bien sûr passer cela. import csv
FH = open('data.csv','wb')
line1 = [97,44,98,44,99,10]
line2 = [100,44,101,44,102,10]
for n in line1 + line2:
FH.write(chr(n))
FH.write(chr(0))
FH.close()
FH = open('data.csv')
reader = csv.reader(FH)
for line in reader:
if '\0' in line: continue
if not line: continue
print line
$ python script.py
['a', 'b', 'c']
['d', 'e', 'f']
Traceback (most recent call last):
File "script.py", line 11, in <module>
for line in reader:
_csv.Error: line contains NULL byte
Salut! J'ai essayé l'essai simple / à l'exception de l'approche. Dans mon cas, c'était facile et bon car j'ai une erreur sur la dernière ligne d'un fichier CSV où aucune donnée n'est valide. J'espère que cette aide.
Vous pouvez essayer de nettoyer le fichier comme vous le lisez:
def nonull(stream):
for line in stream:
yield line.replace('\x00', '')
f = open(filename)
reader = csv.reader(nonull(f))
@John Fouhy: Sans tests, je ne voudrais pas compter sur cette approche travaillant si des champs avaient des nouvelles lignes intégrées, d'autant plus que vous ne garantissez pas le mode binaire ('RB').
Un point équitable, bien que j'imagine beaucoup d'étranglement logiciel sur les fichiers CSV avec de nouvelles lignes intégrées à l'intérieur des champs.
Processez le fichier Initial Ça fonctionne pour moi. P> et la réponse originale est ici: csv-contient nul byte p> p> P> csv code> et remplacez le nul '\ 0' code> avec vide, puis vous pouvez le lire.
Le code actuel ressemble à ceci:
Je n'ai jamais eu de problème avec une boucle. Veuillez ajouter le code actuel, plus la trace, afin que nous puissions dire ce que vous faites vraiment.
Je peux confirmer les étrangers du lecteur sur un octet nul écrit dans le fichier comme CHR (0). Traceback (dernier appel en dernier): fichier "script.py", ligne 11, dans pour la ligne in lecteur: _csv.error: la ligne contient Null Octet
@Telliott: Il n'y a pas d'octet nul.
Mon mauvais: est "caractère nul" ok?
Non, il n'y a pas de "caractère null". C'est un caractère valide. Son nom ASCII est "NUL".