Python Csv TypeError: a bytes-like object is required, not ‘str‘
问题描述:
今天在将数据model导出csv的时候,出现了TypeError: a bytes-like object is required, not 'str',跟之前相比,唯一的区别是当前的python版本是3.8.6的版本,之前是老一点的版本,code完全一样,但是3.8.6的版本出现了异常,原始code如下:
with open(r'D:\MyProjects\test.csv','wb') as csvFile:writer=csv.DictWriter(csvFile,fieldnames=cvaModel().__dict__.keys())writer.writeheader()dic=[item.__dict__ for item in models]writer.writerows(dic)
报错信息如下,在调用writeheader方法的时候,传入的fieldnames数据在内部抛出了异常,显示数据类型有问题:
File ".\GZipTest.py", line 61, in <module>writer.writeheader()return self.writerow(header)File "D:\SoftDownLoad\MySQL\lib\csv.py", line 154, in writerowreturn self.writer.writerow(self._dict_to_list(rowdict)) TypeError: a bytes-like object is required, not 'str'
问题处理:
对报错的说明:在写入文件的时候,我们提出会遇到rb,wb,w这些指定读取的方式,wb表示的是以二进制形式写入到文件中,而w表达的是以文本形式写入到文件中,所以这里我们只需要将wb更改为w即可:
with open(r'D:\MyProjects\test.csv','w') as csvFile:writer=csv.DictWriter(csvFile,fieldnames=cvaModel().__dict__.keys())writer.writeheader()dic=[item.__dict__ for item in models]writer.writerows(dic)
但是至于为什么之前在老的Python版本下,以同样的code运行并没有出现问题,或许是哪儿的配置不一样,或者跟csv引用的版本有关系,这个倒是没有去细究。
扩展 Pandas读取问题:
除此之外,在用pandas将保存的csv另存为excel的时候,也出现了encoding不对的问题,具体报错信息如下:
Traceback (most recent call last):
File ".\GZipTest.py", line 81, in <module>
c=pd.read_csv(r'D:\MyProjects\test.csv')
File "D:\SoftDownLoad\MySQL\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "D:\SoftDownLoad\MySQL\lib\site-packages\pandas\io\parsers\readers.py", line 586, in read_csv
return _read(filepath_or_buffer, kwds)
File "D:\SoftDownLoad\MySQL\lib\site-packages\pandas\io\parsers\readers.py", line 482, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "D:\SoftDownLoad\MySQL\lib\site-packages\pandas\io\parsers\readers.py", line 811, in __init__
self._engine = self._make_engine(self.engine)
return mapping[engine](self.f, **self.options) # type: ignore[call-arg]
File "D:\SoftDownLoad\MySQL\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 69, in __init__
self._reader = parsers.TextReader(self.handles.handle, **kwds)
File "pandas\_libs\parsers.pyx", line 542, in pandas._libs.parsers.TextReader.__cinit__
File "pandas\_libs\parsers.pyx", line 642, in pandas._libs.parsers.TextReader._get_header
File "pandas\_libs\parsers.pyx", line 843, in pandas._libs.parsers.TextReader._tokenize_rows
File "pandas\_libs\parsers.pyx", line 1917, in pandas._libs.parsers.raise_parser_error
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 38: invalid continuation byte
需要在读取csv的时候指定encoding为gbk之后才能正常读取到csv中的数据信息,然后将读取到的数据直接转换为Excel(当然在实际中,除非code需要,基本不会出现这种操作):
c=pd.read_csv(r'D:\MyProjects\test.csv',encoding='gbk')
c.to_excel(r'D:\MyProjects\test.xlsx',index=False,header=True)
因为一个错误导致的其他连锁反应还挺多的。细节决定成败!感谢支持和建议!
Python Csv TypeError: a bytes-like object is required, not ‘str‘相关推荐
- python write报错a byte-like object is required.not str
办法一:根本原因是Python版本问题python2.x中要求用'wb',python3.x中要求用'w' 用open(filename,'w')方式 办法二:encode('ascii')
- Python Socket TypeError: a bytes-like object is required, not 'str' 错误提示
<python核心编程>第三版,发现示例2-1代码返回错误-..纠结很久 发现这里python3.5和Python2.7在套接字返回值解码上有区别. 先介绍一下 python byte ...
- Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
运行环境Mac Python 3.5.2 Q: http_response = """\ HTTP/1.1 200 OK Hello, World! "&qu ...
- Python异常:TypeError: a bytes-like object is required, not 'str'
Python异常:TypeError: a bytes-like object is required, not 'str' import jsonstr = [{"userName&quo ...
- 成功解决TypeError: a bytes-like object is required, not 'str'
成功解决TypeError: a bytes-like object is required, not 'str' 目录 解决问题 解决思路 解决方法 解决问题 TypeError: a bytes- ...
- 生成测试报告时遇到问题TypeError: a bytes-like object is required, not ‘str‘
项目场景: 场景:使用python做自动化测试,用HTMLTestRunner生成自动化测试报告 问题描述 例如:做自动化测试时,用HTMLTestRunner生成自动化测试报告,报错TypeErro ...
- 成功解决TypeError: a bytes-like object is required, not ‘str‘
出现问题: 在文件写操作时出现TypeError: a bytes-like object is required, not 'str' 意思是函数write需要的参数类型是字节对象不是字符串 解决办 ...
- Python更新数据库,解决转译字符与TypeError: XX format: a number is required, not str报错
在使用python更新数据库的时候出现了好多坑,一个个填完之后整理出了完备的代码: import MySQLdb#链接数据库的套路操作 db = MySQLdb.connect("local ...
- a bytes-like object is required, not 'str'
TypeError: a bytes-like object is required, not 'str' 问题分析 该问题主要是由于当前操作的字符串是bytes类型的字符串对象,并对该bytes类型 ...
- a bytes-like object is required, not 'str' pickle.loads pickle.dumps
a bytes-like object is required, not 'str' pickle.loads pickle.dumps pickle可以序列化任何简单对象. 解决方法:
最新文章
- 完整年份值必须介于_上 | 完整解释 Monad 程序员范畴论入门
- SQL Server日期格式的转换
- 常用开源工具、框架收藏
- MongoDB 与传统数据库的对比
- Python中的str与unicode处理方法
- Docker删除某个容器时失败解决方案
- DevExpress.XtraGrid 导出文本的bug
- svn主干开辟分支、分支合并到主干
- 【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
- Exsi6.5修改主机密码
- php camp,Byte Camp
- SQL入门经典-思维导图
- Silicon Labs CP210x USB to UART Bridge_6.6.6.14_4-8-2013_6.1_x64,驱动程序64位环境,ESP32
- clk_get_rate函数
- win10添加打印机失败,无法正常使用打印机的解决办法
- Xinlix原语OSERDESE2的使用和仿真
- Snipaste截图界大咖
- Linux下使用KVM虚拟机运行MacOS和Checkra1n越狱工具
- 计算机等级考试excel试题,计算机等级考试试题及答案解析(Excel) -电脑资料
- ARM中MRS和MSR汇编指令