【问题标题】:Error: iterator should return strings, not bytes错误:迭代器应该返回字符串,而不是字节
【发布时间】:2017-12-30 13:53:37
【问题描述】:

我的代码抛出这个错误:

    File "testdata.py", line 35, in <module>
      for row in reader:
    File "C:\Python36\lib\csv.py", line 111, in __next__
      self.fieldnames
    File "C:\Python36\lib\csv.py", line 98, in fieldnames
     self._fieldnames = next(self.reader)
    _csv.Error: iterator should return strings, not bytes (did you open the 
    file in text mode?)

我关注了这个tutorial,并多次做了视频上的所有操作,并在这里寻找类似的问题,但到目前为止我还没有找到解决我的问题的方法。

These are the files used in the video.

此错误与this 不同,我尝试使用该修复程序但它导致我出现另一个错误。

我的代码:

filename = "data.csv"
temp_file = NamedTemporaryFile(delete=False)
with open(filename, "rb") as csvfile, temp_file:
     reader = csv.DictReader(csvfile)
     fieldnames = ['id', 'name', 'email', 'amount', 'sent']
     writer = csv.DictWriter(temp_file, fieldnames=fieldnames)
     #writer.writeheader()
     for row in reader:
         print(row)
         writer.writerow({
                "id": row["id"],
                "name": row["name"],
                "email": row["email"],
                "amount": "1293.33",
                "sent": "",
              })

【问题讨论】:

  • 您已将文件打开为“rb” - 只需使用“r”...?
  • 将“错误:迭代器应返回字符串,而不是字节”粘贴到 Google 中,您将获得 许多 个如何解决此问题的示例。可以轻松复制和粘贴的跟踪消息是 Python 对新开发人员如此友好的原因之一。
  • 我尝试了该修复,但没有成功。它导致我另一个错误

标签: python-3.x csv


【解决方案1】:
import csv
from tempfile import NamedTemporaryFile

filename = "data.csv"
temp_file = NamedTemporaryFile(mode='w', delete=False)
with open(filename, "r", newline='') as csvfile, temp_file:
    reader = csv.DictReader(csvfile)
    fieldnames = ['id', 'name', 'email', 'amount', 'sent']
    writer = csv.DictWriter(temp_file, fieldnames=fieldnames)
    #writer.writeheader()
    for row in reader:
        print(row)
        writer.writerow({
                "id": row["id"],
                "name": row["name"],
                "email": row["email"],
                "amount": "1293.33",
                "sent": "",
            })
  • mode='w' 设置为NamedTemporaryFile
  • mode='r' 设置为open 以读取。
  • newline='' 设置为open 以读取。

实施这些更改,它适用于我使用 Python 3.6.0 进行的测试。

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2017-01-29
    • 2018-02-15
    • 2020-01-10
    • 2020-12-17
    相关资源
    最近更新 更多