《Python Cookbook 3rd》筆記(5.17):將位元組寫入文字檔案

巨輪發表於2020-12-10

將位元組寫入文字檔案

問題

你想在文字模式開啟的檔案中寫入原始的位元組資料。

解法

將位元組資料直接寫入檔案的緩衝區即可,例如:

>>> import sys
>>> sys.stdout.write(b'Hello\n')
Traceback (most recent call last):
	File "<stdin>", line 1, in <module>
TypeError: must be str, not bytes
>>> sys.stdout.buffer.write(b'Hello\n')
Hello
5
>>>

類似的,能夠通過讀取文字檔案的 buffer 屬性來讀取二進位制資料。

討論

I/O 系統以層級結構的形式構建而成。文字檔案是通過在一個擁有緩衝的二進位制模式檔案上增加一個 Unicode 編碼/解碼層來建立。 buffer 屬性指向對應的底層檔案。如果你直接訪問它的話就會繞過文字編碼/解碼層。

本小節例子展示的 sys.stdout 可能看起來有點特殊。預設情況下, sys.stdout 總是以文字模式開啟的。但是如果你在寫一個需要列印二進位制資料到標準輸出的指令碼的話,你可以使用上面演示的技術來繞過文字編碼層。

相關文章