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

  • 更新时间:2022-10-19 09:00:49
  • 编辑:芮正诚

处理上传的文件:

 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')

问题终于的到了解决。

以上这篇解决Python 写文件报错TypeError的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

相关教程

  • Python Opencv实战之印章提取的实现

    Python Opencv实战之印章提取的实现

    给大家整理了关于Python的教程,很多时候我们需要电子版的章,但有些同学并不会通过Photoshop抠图获取。因此本文将利用Python OpenCV来实现印章的提取,感兴趣的可以了解一下

    发布时间:2022-07-07

  • Python将字符串转换为datetime的方法

    在Python中对于时间和字符串之间的转换很常见,time、datetime和string之间的相互转换可以通过datatime、time库进行实现,这里有案例的具体实现,但是转换过程中需要注意时间的格式。

    发布时间:2021-05-02

  • python调试中print()和断言实例讲解

    介绍了python调试中print()和断言的相关知识点内容,实例讲解,有兴趣点朋友们学习下。

    发布时间:2019-09-10

  • python telnetlib模块安装实例

    在本篇内容里小编给大家整理了关于python telnetlib模块安装的实例代码内容,需要的朋友们参考学习下。

    发布时间:2019-06-24

  • Python读取mat文件保存为pickle格式的实例代码

    今天小编就为大家分享一篇Python读取mat文件,并保存为pickle格式的方法以及Python使用pickle模块储存对象操作示例,具有很好的参考价值,希望对大家有所帮助。

    发布时间:2018-10-23

  • 多版本python python2和python3共存以及pip共存方法

    这篇文章主要为大家详细介绍了python多版本的安装方法,解决python2和python3共存以及pip共存问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2019-06-21

  • 通信专业的学java还是python有前途

    在本篇内容里小编给大家整理了关于通信专业的学java还是python有前途的相关内容,有兴趣的朋友们跟着学习参考下。

    发布时间:2019-07-04

  • python的安装

    python默认是安装到C盘,如果c盘空间不够,放哪里都可以,但路径不要有空格出现。推荐安装到D盘或E盘。

    发布时间:2020-03-13

  • Win10中python3.7安装dlib模块的技巧和坑

    这篇文章主要介绍了Win10环境python3.7安装dlib模块趟过的坑,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2020-01-30

用户留言