python讀資料 Python如何讀寫位元組資料

2021-10-10 03:49:41 字數 1574 閱讀 5055

問題

你想讀寫二進位制檔案,比如,聲音檔案等等。

解決方案

使用模式為 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...

記憶體讀資料和磁碟讀資料的區別

當程式要讀取的資料時傳入記憶體位址 行位址 列位址 如果資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,通過柱面號,磁頭號,扇區號定位磁碟位置,找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中。於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度...