解决Python 写文件报错TypeError的问题

作者:Kwoky 时间:2022-09-18 06:54:26 

处理上传的文件:


f1 = request.FILES['pic']
fname = '%s/%s' % (settings.MEDIA_ROOT, f1.name)
with open(fname, 'w') as pic:
 for c in f1.chunks():
 pic.write(c)

测试报错:

TypeError at /upload/

write() argument must be str, not bytes

把之前的打开语句修改为用二进制方式打开:


f1 = request.FILES['pic']
fname = '%s/%s' % (settings.MEDIA_ROOT, f1.name)
with open(fname, 'wb+') as pic:
 for c in f1.chunks():
 pic.write(c)

没有问题了~

补充知识:python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法

python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

python2使用的是cPickle模块,而在python3中cPickle已经被取消,取而代之的是pickle模块。

开发过程中,我曾经遇到一个奇怪的问题,在读取一个文件时候,使用python2的如下方式:

import cPickle

train, test, dicts = cPickle.load(open("./dataset/atis.pkl"))

是可以正常读取文件的。

可是当换做python3的方式读取文件时候,如下:

import pickle

train, test, dicts = pickle.load(open("./dataset/atis.pkl"))

却获得了错误提示,提示信息如下:

Traceback (most recent call last):

File “Main.py”, line 4, in

train, test, dicts = pickle.load(open(“./dataset/atis.pkl”))

TypeError: ‘str' does not support the buffer interface

查询错误信息后得知解决办法 链接,应该指明用二进制方式打开文件,于是代码改为:

import pickle

train, test, dicts = pickle.load(open("./dataset/atis.pkl", "rb"))

可是这时候错误变成了:

Traceback (most recent call last):

File “Main.py”, line 4, in

train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”))

UnicodeDecodeError: ‘ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128)

于是再次求助万能的google,终于找到了解决办法 链接,我们需要告诉pickle:how to convert Python bytestring data to Python 3 strings,The default is to try and decode all string data as ASCII,所以代码改为:

import pickle

train, test, dicts = pickle.load(open("./dataset/atis.pkl", "rb"), encoding='iso-8859-1')

问题终于的到了解决。

来源:https://blog.csdn.net/Kwoky/article/details/79789316

标签:Python,TypeError
0
投稿

猜你喜欢

  • MySQL索引优化之分页探索详细介绍

    2024-01-16 12:05:17
  • go如何利用orm简单实现接口分布式锁

    2023-06-17 16:55:04
  • Python实现比较两个文件夹中代码变化的方法

    2022-04-07 23:16:08
  • pyqt 实现在Widgets中显示图片和文字的方法

    2021-12-25 07:28:16
  • JavaScript登录验证码的实现

    2023-08-23 21:03:12
  • python将图片转base64,实现前端显示

    2021-04-26 14:03:04
  • Python实现的批量修改文件后缀名操作示例

    2021-08-28 08:34:58
  • 使用python opencv对畸变图像进行矫正的实现

    2021-08-18 01:09:44
  • 301转向和网址规范化

    2007-09-26 14:00:00
  • 浅谈Scrapy框架普通反爬虫机制的应对策略

    2023-07-14 17:11:40
  • matplotlib绘制多子图共享鼠标光标的方法示例

    2023-06-15 13:45:19
  • 使用post方法实现json往返传输数据的方法

    2024-04-18 09:28:23
  • Python实现判断一个整数是否为回文数算法示例

    2022-05-13 12:01:07
  • 如何在浏览器地址栏显示自己的Favicons.ico图标

    2007-10-22 11:45:00
  • python函数存储在模块的优点及用法总结

    2023-06-03 16:52:41
  • ASP中模拟PHP的关联数组

    2009-12-25 16:31:00
  • Python海象运算符超详细讲解

    2023-08-04 17:26:19
  • 公共Hooks封装报表导出useExportExcel实现详解

    2024-04-28 09:21:36
  • 仿google的asp分页代码

    2009-03-08 18:27:00
  • 超详细的Python安装第三方库常用方法汇总

    2023-08-26 08:54:47
  • asp之家 网络编程 m.aspxhome.com