_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

本文讲述了如何修复Python中使用DictReader从CSV文件读取时遇到的编码错误,重点在于正确打开文件并指定UTF-8编码。通过with语句确保文件在操作完成后自动关闭,避免了编码问题导致的报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from csv import DictReader
data_rdr = DictReader(open('data/mn.csv', 'rb'))
header_rdr = DictReader(open('data/mn_headers.csv', 'rb'))
data_rows = [d for d in data_rdr]
header_rows = [h for h in header_rdr]
print (data_rows[:5])

报错:

Traceback (most recent call last):
  File "D:\python\python-code\mn-code\main.py", line 4, in <module>
    data_rows = [d for d in data_rdr]
  File "D:\python\python-code\mn-code\main.py", line 4, in <listcomp>
    data_rows = [d for d in data_rdr]
  File "D:\python\python39\lib\csv.py", line 110, in __next__
    self.fieldnames
  File "D:\python\python39\lib\csv.py", line 97, in fieldnames
    self._fieldnames = next(self.reader)
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
 

修改如下:

from csv import DictReader
with open("data/mn.csv", "rt", encoding="utf-8") \
        as mnfile:
    data_rdr = DictReader(mnfile)
    data_rows = [d for d in data_rdr]
with open("data//mn_headers.csv", "rt", encoding="utf-8") as mn_headersfile:
    header_rdr = DictReader(mn_headersfile)
    header_rows = [h for h in header_rdr]
print(header_rows[:5])

要注意 data_rdr = DictReader(mnfile) data_rows = [d for d in data_rdr]两处的缩进,如果缩进不对,会报错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值