python讀寫二進制
1. python關於二進制文件讀取的問題
argument for 's' must be a bytes object
參數必須是bytes object
2. Python編程中如何讀寫二進制文件
Python編程中,處理二進制文件是常見的需求。與文本文件不同,它們由位元組構成,適合存儲復雜數據如圖像、音頻和視頻。本文將深入講解如何在Python中進行二進制文件的讀寫操作。
首先,理解二進制文件的概念至關重要。它們是由一系列位元組組成,不受字元編碼限制,能存儲復雜數據結構。在Python中,使用open()函數開啟文件時,需要指定"rb"或"wb"模式以區分讀取和寫入。
讀取二進制文件,使用read()方法,可以指定讀取位元組數,如果不指定,將讀取整個文件。寫入則通過write()方法,輸入的必須是位元組類型,可通過encode()轉換。例如,讀取圖像文件和復制二進制文件的操作如下:
python
# 讀取圖像文件
with open('image.bin', 'rb') as img_file:
img_data = img_file.read()
# 復制二進制文件
with open('src.bin', 'rb') as src, open('dest.bin', 'wb') as dst:
dst.write(src.read())
對於音頻文件的處理,同樣可以運用這些方法。例如,提取音頻數據:
python
# 讀取音頻文件並提取數據
with open('audio.wav', 'rb') as audio_file:
audio_data = audio_file.read()
通過以上步驟,你將能夠熟練處理Python中的二進制文件,無論是在數據處理還是文件操作中,都能得心應手。希望本文對你的編程實踐有所幫助。
3. 求助:python如何按位解析二進制數據
可以的,二進制是計算機內的表示方法,處理二進制數據是最基本的能力。
如果是二進制字元串轉十進制:
>>>x='10101010'
>>>int(x,2)
170
如果是從文件或網路中獲取的數據,要知道某一位是0還是1的話,獲取的數據可以按字元讀取,由於一個字元由8位二進製表示,分別讀取1到8位的二進制值就可以了:
>>>get_char_bit=lambdachar,n:(char>>(8-n))&1#從高到低分別為第1~8位
>>>data=b'ab'#在python3中字元串默認是unicode,所以加上b前綴兼容
>>>#在python3中按字元讀取byte字元串是數字,而python2讀出來的卻是字元,但bytearray是一致的都是數字
>>>data=bytearray(data)
>>>result=[]
>>>forcharindata:
foriinrange(1,9):
result.append(get_char_bit(char,i))
>>>result
[0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,0]
還有一種比較簡單的方法是使用內置的bin函數
>>>data=bytearray(b'ab')
>>>result=[]
>>>forcharindata:
result.extend(bin(char)[2:].rjust(8,'0'))
>>>result
['0','1','1','0','0','0','0','1','0','1','1','0','0','0','1','0']
4. 在python中如何從二進制文件中讀取信息
你是指讀入二進制文件吧?
可以使用numpy.fromfile(),也可以使用open(filename, 'rb'),其中的'b'就是二進制的意思,然後使用文件類型的read方法,讀取一些位元組,再用struct.unpack()方法來解析二進制。
第一種方法是一次性讀入文件(或文件的前多少個連續位元組)到一個數組中,因此,靈活性差。
第二種方法靈活性很高,可以讀取任意位置(使用文件的seek()方法跳躍位置)的二進制數據,再使用struct.unpack()方法來進行各種二進制解析。
提示:二進制文件是不保留存儲方式的數據格式,因此,讀二進制文件時應該知道二進制文件的存儲格式。