我的代码抛出了这个错误:
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": "",
})
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进行的测试。