5.17 將字節(jié)寫入文本文件

2018-02-24 15:26 更新

問題

你想在文本模式打開的文件中寫入原始的字節(jié)數(shù)據(jù)。

解決方案

將字節(jié)數(shù)據(jù)直接寫入文件的緩沖區(qū)即可,例如:

>>> 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 屬性來讀取二進制數(shù)據(jù)。

討論

I/O系統(tǒng)以層級結(jié)構(gòu)的形式構(gòu)建而成。文本文件是通過在一個擁有緩沖的二進制模式文件上增加一個Unicode編碼/解碼層來創(chuàng)建。buffer 屬性指向?qū)?yīng)的底層文件。如果你直接訪問它的話就會繞過文本編碼/解碼層。

本小節(jié)例子展示的 sys.stdout 可能看起來有點特殊。默認(rèn)情況下,sys.stdout 總是以文本模式打開的。但是如果你在寫一個需要打印二進制數(shù)據(jù)到標(biāo)準(zhǔn)輸出的腳本的話,你可以使用上面演示的技術(shù)來繞過文本編碼層。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號