有沒有一種簡單的方法在Python中將文件的十六進制數據讀入列表中,比如說hex
?Python:從文件讀取十六進制到列表中?
所以hex
會是這樣:
hex = ['AA','CD','FF','0F']
我不希望有讀入一個字符串,然後分割。這對於大文件而言是內存密集型的。
有沒有一種簡單的方法在Python中將文件的十六進制數據讀入列表中,比如說hex
?Python:從文件讀取十六進制到列表中?
所以hex
會是這樣:
hex = ['AA','CD','FF','0F']
我不希望有讀入一個字符串,然後分割。這對於大文件而言是內存密集型的。
s = "Hello"
hex_list = ["{:02x}".format(ord(c)) for c in s]
輸出
['48', '65', '6c', '6c', '6f']
只要改變s
到open(filename).read()
,你應該是好的。
with open('/path/to/some/file', 'r') as fp:
hex_list = ["{:02x}".format(ord(c)) for c in fp.read()]
或者,如果你不想大文件保存在內存中的整個列表一次。
hex_list = ("{:02x}".format(ord(c)) for c in fp.read())
,並得到的值,保持通話
next(hex_list)
從發電機獲得的所有剩餘值
list(hex_list)
只要確保 - 這贏了'大文件不會變慢? –
如果你關心它,你可以使'hex_list'成爲一個生成器 –
對不起,我很喜歡python ...請解釋@ cricket_007 –
注意,用於查看文件的十六進制轉儲,有在大多數操作系統上都可用如果你想要做的是十六進制轉儲文件,認爲這些方案之一:
od
(八場,其中有一個-x
或-t x
選項)窗口hexdump
xd
工具 我需要這在純Python;) –
使用Python 3,讓我們假設輸入文件包含您顯示的示例字節。例如,我們可以這樣
>>> inp = bytes((170,12*16+13,255,15)) # i.e. b'\xaa\xcd\xff\x0f'
>>> with open(filename,'wb') as f:
... f.write(inp)
現在創建它,因爲我們想在輸入文件中的每個字節的十六進制表示,這將是很好的以二進制方式打開文件,而不會試圖解釋其內容爲字符/字符串
>>> with open(filename,'rb') as f:
... buff = f.read() # it reads the whole file into memory
...
>>> buff
b'\xaa\xcd\xff\x0f'
>>> out_hex = ['{:02X}'.format(b) for b in buff]
>>> out_hex
['AA', 'CD', 'FF', '0F']
如果文件較大(或者我們可能會在錯誤UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 0: invalid start byte
跳閘),我們可能要在同一時間或以塊的形式讀取一個字符。爲此,我推薦閱讀this Q&A
你有一個元組,而不是一個列表。 – jsfan
對不起,要糾正 –
[http://stackoverflow.com/questions/3964245/convert-file-to-hex-string-python](http://stackoverflow.com/questions/3964245/convert-file-to- hex-string-python)這不是一個確切的答案,但可能會推動你在正確的方向。 –