鱼C论坛

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

[已解决]python问题求助

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

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

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

x
from csv import DictReader

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

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

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

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

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

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

Error: iterator should return strings, not bytes (did you open the file in text mode?)
最佳答案
2021-4-3 11:30:58
        打开文件的两个语句改为下面这样试试
data_rdr = DictReader(open('mn.csv' , encoding='UTF-8'))
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"

出现了这个错误
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 | 显示全部楼层    本楼为最佳答案   
        打开文件的两个语句改为下面这样试试
data_rdr = DictReader(open('mn.csv' , encoding='UTF-8'))
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 文件。
from csv import DictReader
import sys

def readfile(fn):
    r = ''
    fp = open(fn , 'rb')
    b = fp . read()
    fp . close()
    e = True
    try:
        t = b . decode('GBK')
    except:
        try:
            t = b . decode('UTF-8')
        except:
            sys . stderr . write('*** 错误,无法按照文本读取文件 : ' + fn + '\n')
            e = False
    if e:
        r = t . split('\n')
    return r

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

data_rows = [d for d in data_rdr]
header_rows = [h for h in header_rdr]

print(data_rows[:5])
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, 2025-1-16 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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