Sample.csv contient les éléments suivants:
NAME Id No Dept
Tom 1 12 CS
Hendry 2 35 EC
Bahamas 3 21 IT
Frank 4 61 EE
Et le fichier Python contient le code suivant:
import csv
ifile = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
print (row)
Lorsque j'exécute le code ci-dessus en Python, j'obtiens l'exception suivante:
Fichier "csvformat.py", ligne 4, dans pour ligne en lecture: _csv.Erreur: l'itérateur doit renvoyer des chaînes, pas des octets (avez-vous ouvert le fichier en mode texte?)
Comment puis-je y remédier?
python
python-3.x
csv
Pika le magicien des baleines
la source
la source
Je viens de résoudre ce problème avec mon code. La raison pour laquelle il lève cette exception est que vous avez l'argument
rb
. Changez cela enr
.Votre code:
Nouveau code:
la source
Votre problème est que vous avez le
b
dans leopen
drapeau. Le drapeaurt
(lecture, texte) est la valeur par défaut, donc, en utilisant le gestionnaire de contexte, faites simplement ceci:Le gestionnaire de contexte signifie que vous n'avez pas besoin de gestion générique des erreurs (sans quoi vous risquez de rester bloqué avec le fichier ouvert, en particulier dans un interpréteur), car il fermera automatiquement le fichier en cas d'erreur ou en quittant le contexte.
Ce qui précède est le même que:
ou
la source
with
déclaration aka le gestionnaire de contexte n'a rien à voir avec cette question, du tout!En Python3,
csv.reader
attend, qui passé iterable renvoie des chaînes, pas des octets. Voici une autre solution à ce problème, qui utilise lecodecs
module:la source
J'ai eu cette erreur lors de l'exécution d'un ancien script python développé avec Python 2.6.4
Lors de la mise à jour vers 3.6.2, j'ai dû supprimer tous les paramètres 'rb' des appels ouverts afin de corriger cette erreur de lecture csv.
la source