解決Python 寫文件報錯TypeError的問題
處理上傳的文件:
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模塊實現(xiàn)了基本的數(shù)據(jù)序列和反序列化。通過pickle模塊的序列化操作我們能夠將程序中運行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創(chuàng)建上一次程序保存的對象。
python2使用的是cPickle模塊,而在python3中cPickle已經被取消,取而代之的是pickle模塊。
開發(fā)過程中,我曾經遇到一個奇怪的問題,在讀取一個文件時候,使用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的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于tkinter中ttk控件的width-height設置方式
這篇文章主要介紹了基于tkinter中ttk控件的width-height設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05Python Process創(chuàng)建進程的2種方法詳解
這篇文章主要介紹了Python Process創(chuàng)建進程的2種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01django1.11.1 models 數(shù)據(jù)庫同步方法
今天小編就為大家分享一篇django1.11.1 models 數(shù)據(jù)庫同步方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05