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

2021-10-10 02:17:33 字數 1574 閱讀 9709

問題

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

解決方案

使用模式為 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如何讀取畫素值

使用image模組中的getpixel函式獲得畫素值。getpixel函式檢索指定座標點的畫素的rgb顏色值。函式原型 colorref getpixel hdc hdc,int nxpos,int nypos 引數 hdc 裝置環境控制代碼。nxpos 指定要檢查的畫素點的邏輯x軸座標。nypos...

python如何讀 python中如何讀入資料

python的文字處理是經常碰到的乙個問題,python的文字檔案的內容讀取中,有三類方法 read readline readlines 這三種方法各有利弊,下面逐一介紹其使用方法和利弊。read read 是最簡單的一種方法,一次性讀取檔案的所有內容放在乙個大字串中,即存在記憶體中file ob...

python開啟檔案 如何用Python讀寫檔案

前面我們已經介紹了很多python相關的基礎知識,大家是不是對python已經有了進一步認識了呢?作為人工智慧時代的熱門程式語言,開始接觸並學習python的孩子越來越多,家長們都不想讓自己的孩子落於人後,近期前來找陳老師諮詢相關課程的人不少。今天和大家說說如何用python操作乙個檔案的內容,一起...