簡體   English   中英

在Python 3中將字符串列表轉換和編寫為二進制字符串

[英]Converting and writing list of strings as binary in Python 3

我正在嘗試轉換此代碼的Python 2.x版本:

out_chunk = open('out.txt','w+b')
chunks.append(out_chunk) # out_chunk is just a list of strings like ['a', 'b', ...]
out_chunk.writelines(chunk)

到Python 3.x版本。 如果直接在Python 3.x中運行上述代碼,則會收到類似以下的錯誤,這是預期的:

Traceback (most recent call last):
  File "C:/Users/Desktop/es/prog.py", line 145, in <module>
    ob.external_sort()
  File "C:/Users/Desktop/es/prog.py", line 70, in my_func
    out_chunk.writelines(chunk)
TypeError: a bytes-like object is required, not 'str'

有沒有一種方法可以在Python 3.x中將字符串列表寫為字節? 還是我應該以字符串列表的形式編寫(也許會對性能產生影響?)

您以二進制模式打開了文件,因此必須對字節進行編碼。

如果從文件模式中刪除'b'部分(因此使用'w+'而不是'w+b'打開),則會獲得TextIOBase接口的實現,該接口將為給定編碼的字符串編碼(默認是使用locale.getdefaultencoding()的結果,您可能想改為向open()調用提供一個顯式的encoding參數)。

另一種選擇是讓您使用每個塊上的str.encode()方法手動編碼字符串。 但是,將編碼TextIOBase實現會更快一些,因為I / O層可以進行編碼而不必在每個str塊上查找方法對象,也不必將結果字節裝在Python bytes對象中再次。

同樣,對於需要字節順序標記的編碼,最好將標記寫入文件實現中。

但是,如果首先可以生成bytes對象 ,則完全不必編碼。

只是不要以二進制模式打開文件:

out_chunk = open('out.txt','w+')

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM