Sample.csv zawiera następujące elementy:
NAME Id No Dept
Tom 1 12 CS
Hendry 2 35 EC
Bahamas 3 21 IT
Frank 4 61 EE
A plik Pythona zawiera następujący kod:
import csv
ifile = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
print (row)
Kiedy uruchamiam powyższy kod w Pythonie, otrzymuję następujący wyjątek:
Plik „csvformat.py”, wiersz 4, w wierszu w czytaniu: _csv.Error: iterator powinien zwracać ciągi znaków, a nie bajty (czy otworzyłeś plik w trybie tekstowym?)
Jak mogę to naprawić?
python
python-3.x
csv
Pika, czarodziej wielorybów
źródło
źródło
Właśnie rozwiązałem ten problem z moim kodem. Powodem, dla którego rzuca ten wyjątek, jest to, że masz argument
rb
. Zmień to nar
.Twój kod:
Nowy kod:
źródło
Twój problem to masz
b
wopen
flagi. Flagart
(odczyt, tekst) jest domyślna, więc korzystając z menedżera kontekstu, po prostu zrób to:Menedżer kontekstu oznacza, że nie potrzebujesz ogólnej obsługi błędów (bez której możesz utknąć z otwartym plikiem, szczególnie w interprecie), ponieważ automatycznie zamknie plik w przypadku błędu lub przy wyjściu z kontekstu.
Powyższe jest takie samo jak:
lub
źródło
with
Oświadczenie aka kierownika kontekstowym nie ma nic wspólnego z tym pytaniem, w ogóle!W Pythonie3
csv.reader
oczekuje, że przekazana iterowalność zwraca ciągi, a nie bajty. Oto jeszcze jedno rozwiązanie tego problemu, które wykorzystujecodecs
moduł:źródło
Wystąpił ten błąd podczas uruchamiania starego skryptu Pythona opracowanego w Pythonie 2.6.4
Podczas aktualizacji do 3.6.2 musiałem usunąć wszystkie parametry „rb” z otwartych wywołań, aby naprawić ten błąd odczytu csv.
źródło