错误:迭代器应返回字符串,而不是字节

问题描述 投票:0回答:1

我的代码抛出了这个错误:

    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": "",
              })
python-3.x csv
1个回答
0
投票
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进行的测试。

© www.soinside.com 2019 - 2024. All rights reserved.