1. ホーム
  2. python

[解決済み] csv.Error: イテレータはバイトではなく文字列を返すべき

2022-02-03 23:08:20

質問

Sample.csvの内容は以下の通りです。

NAME    Id   No  Dept
Tom     1    12   CS
Hendry  2    35   EC
Bahamas 3    21   IT
Frank   4    61   EE

そして、Pythonファイルには、以下のようなコードが含まれています。

import csv
ifile  = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
    print (row) 

上記のコードをPythonで実行すると、以下のような例外が発生します。

ファイル "csvformat.py", 行 4, in for row in read : _csv.Error: iterator should return strings, not bytes (did you open the file in text mode?ファイルをテキストモードで開きましたか?)

どうすれば直るのでしょうか?

どのように解決するのですか?

テキストモードでファイルを開くと

具体的には

ifile  = open('sample.csv', "rt", encoding=<theencodingofthefile>)

エンコーディングは "ascii" と "utf8" が良いかと思われます。エンコーディングをオフにすると、システムのデフォルトエンコーディングが使用されます。