問題
你想讀寫二進位制檔案,比如,聲音檔案等等。
解決方案
使用模式為 rb 或 wb 的 open() 函式來讀取或寫入二進位制資料。比如:
# read the entire file as a single byte string
withopen('somefile.bin','rb') as f:
data= f.read()
# write binary data to a file
withopen('somefile.bin','wb') as f:
f.write(b'hello world')
在讀取二進位制資料時,需要指明的是所有返回的資料都是位元組字串格式的,而不是文字字串。 類似的,在寫入的時候,必須保證引數是以位元組形式對外暴露資料的物件(比如位元組字串,位元組陣列物件等)。
討論在讀取二進位制資料的時候,位元組字串和文字字串的語義差異可能會導致乙個潛在的陷阱。 特別需要注意的是,索引和迭代動作返回的是位元組的值而不是位元組字串。比如:
>>># text string
>>> t= 'hello world'
>>> t[0]
'h'>>>for cin t:
...print(c)he
llo>>># byte string
>>> b= b'hello world'
>>> b[0]
>>>for cin b:
...print(c)
如果你想從二進位制模式的檔案中讀取或寫入文字資料,必須確保要進行解碼和編碼操作。比如:
withopen('somefile.bin','rb') as f:
data= f.read(16)
text= data.decode('utf-8')
withopen('somefile.bin','wb') as f:
text= 'hello world'
f.write(text.encode('utf-8'))
二進位制i/o還有乙個鮮為人知的特性就是陣列和c結構體型別能直接被寫入,而不需要中間轉換為自己物件。比如:
import array
nums= array.array('i', [1,2,3,4])
withopen('data.bin','wb') as f:
f.write(nums)
這個適用於任何實現了被稱之為」緩衝介面」的物件,這種物件會直接暴露其底層的記憶體緩衝區給能處理它的操作。 二進位制資料的寫入就是這類操作之一。
很多物件還允許通過使用檔案物件的 readinto() 方法直接讀取二進位制資料到其底層的記憶體中去。比如:
>>>import array
>>> a= array.array('i', [0,0,0,0,0,0,0,0])
>>> withopen('data.bin','rb') as f:
... f.readinto(a)
>>> a
array('i', [1,2,3,4,0,0,0,0])
但是使用這種技術的時候需要格外小心,因為它通常具有平台相關性,並且可能會依賴字長和位元組順序(高位優先和低位優先)。
python讀資料 python中如何讀入資料
python的文字處理是經常碰到的乙個問題,python的文字檔案的內容讀取中,有三類方法 read readline readlines 這三種方法各有利弊,下面逐一介紹其使用方法和利弊。read read 是最簡單的一種方法,一次性讀取檔案的所有內容放在乙個大字串中,即存在記憶體中file ob...
讀資料保持
always posedge clk or negedge rst b if rst b ram ren d1 1 b0 else ram ren d1 ram ren always posedge clk or negedge rst b if rst b ram dout d1 else ram...
記憶體讀資料和磁碟讀資料的區別
當程式要讀取的資料時傳入記憶體位址 行位址 列位址 如果資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,通過柱面號,磁頭號,扇區號定位磁碟位置,找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中。於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度...