鱼C论坛

 找回密码
 立即注册
查看: 1507|回复: 7

[已解决]python问题求助

[复制链接]
发表于 2021-4-3 10:43:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. from csv import DictReader

  2. data_rdr = DictReader(open('mn.csv','rb'))
  3. header_rdr = DictReader(open('mn_headers.csv','rb'))

  4. data_rows = [d for d in data_rdr]
  5. header_rows = [h for h in header_rdr]

  6. print(data_rows[:5])
  7. print(header_rows[:5])
复制代码


python报错,求助
  1. runfile('C:/Users/Administrator/Desktop/新建文件夹/7.2.1找出需要清洗的数据.py', wdir='C:/Users/Administrator/Desktop/新建文件夹')
  2. Traceback (most recent call last):

  3.   File "C:\Users\Administrator\Desktop\新建文件夹\7.2.1找出需要清洗的数据.py", line 13, in <module>
  4.     data_rows = [d for d in data_rdr]

  5.   File "C:\Users\Administrator\Desktop\新建文件夹\7.2.1找出需要清洗的数据.py", line 13, in <listcomp>
  6.     data_rows = [d for d in data_rdr]

  7.   File "D:\Anaconda3\lib\csv.py", line 110, in __next__
  8.     self.fieldnames

  9.   File "D:\Anaconda3\lib\csv.py", line 97, in fieldnames
  10.     self._fieldnames = next(self.reader)

  11. Error: iterator should return strings, not bytes (did you open the file in text mode?)
复制代码
最佳答案
2021-4-3 11:30:58
        打开文件的两个语句改为下面这样试试
  1. data_rdr = DictReader(open('mn.csv' , encoding='UTF-8'))
  2. header_rdr = DictReader(open('mn_headers.csv , encoding='UTF-8'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-3 10:46:03 | 显示全部楼层
试试 将 "rb"  改成 "rt"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-3 10:53:10 | 显示全部楼层
qq1151985918 发表于 2021-4-3 10:46
试试 将 "rb"  改成 "rt"

出现了这个错误
  1. UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 2817: illegal multibyte sequence
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-3 10:53:48 | 显示全部楼层

换完之后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-3 11:30:58 | 显示全部楼层    本楼为最佳答案   
        打开文件的两个语句改为下面这样试试
  1. data_rdr = DictReader(open('mn.csv' , encoding='UTF-8'))
  2. header_rdr = DictReader(open('mn_headers.csv , encoding='UTF-8'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-3 11:37:42 From FishC Mobile | 显示全部楼层
江晓夜 发表于 2021-4-3 10:53
出现了这个错误

那就再加一句 encoding = 'utf-8'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-3 11:52:23 | 显示全部楼层
本帖最后由 jackz007 于 2021-4-3 11:58 编辑

        Python 文本文件的编、解码问题着实是一件让人头疼的事情,楼主试试这个代码吧,新定义的函数 readfile() 可以自动尝试按 'GBK' 和 'UTF-8' 两种编码来读入 CSV 文件。
  1. from csv import DictReader
  2. import sys

  3. def readfile(fn):
  4.     r = ''
  5.     fp = open(fn , 'rb')
  6.     b = fp . read()
  7.     fp . close()
  8.     e = True
  9.     try:
  10.         t = b . decode('GBK')
  11.     except:
  12.         try:
  13.             t = b . decode('UTF-8')
  14.         except:
  15.             sys . stderr . write('*** 错误,无法按照文本读取文件 : ' + fn + '\n')
  16.             e = False
  17.     if e:
  18.         r = t . split('\n')
  19.     return r

  20. data_rdr = DictReader(readfile('mn.csv))
  21. header_rdr = DictReader(readfile('mn_headers.csv'))

  22. data_rows = [d for d in data_rdr]
  23. header_rows = [h for h in header_rdr]

  24. print(data_rows[:5])
  25. print(header_rows[:5])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-3 13:41:43 | 显示全部楼层
jackz007 发表于 2021-4-3 11:30
打开文件的两个语句改为下面这样试试

非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表