python 3.5: TypeError: a bytes-like object is required, not 'str'


出現該錯誤往往是通過open()函數打開文本文件時,使用了‘rb’屬性,如:fileHandle=open(filename,'rb'),則此時是通過二進制方式打開文件的,所以在后面處理時如果使用了str()函數,就會出現該錯誤,該錯誤不會再python2中出現。

具體解決方法有以下兩種:

第一種,在open()函數中使用‘r’屬性,即文本方式讀取,而不是‘rb’,以二進制文件方式讀取,可以直接解決問題。

第二種,在open()函數中使用‘rb’,可以在使用之前進行轉換,有以下實例,來自:http://stackoverflow.com/questions/33054527/python-3-5-typeerror-a-bytes-like-object-is-required-not-str

 

1:查找文件時:
with open(fname, 'rb') as f:
                if b'some-pattern' in tmp: continue

2:使用socketl連接時:
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send(**b**'GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print (data);

mysock.close()

3:提前進行編碼:
with open(fname, 'rb') as f:
    lines = [x.decode('utf8').strip() for x in f.readlines()]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM