2016-02-19 65 views
6

有沒有一種簡單的方法在Python中將文件的十六進制數據讀入列表中,比如說hexPython:從文件讀取十六進制到列表中?

所以hex會是這樣:

hex = ['AA','CD','FF','0F']

我不希望有讀入一個字符串,然後分割。這對於大文件而言是內存密集型的。

+1

你有一個元組,而不是一個列表。 – jsfan

+0

對不起,要糾正 –

+2

[http://stackoverflow.com/questions/3964245/convert-file-to-hex-string-python](http://stackoverflow.com/questions/3964245/convert-file-to- hex-string-python)這不是一個確切的答案,但可能會推動你在正確的方向。 –

回答

8
s = "Hello" 
hex_list = ["{:02x}".format(ord(c)) for c in s] 

輸出

['48', '65', '6c', '6c', '6f'] 

只要改變sopen(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) 
+0

只要確保 - 這贏了'大文件不會變慢? –

+0

如果你關心它,你可以使'hex_list'成爲一個生成器 –

+0

對不起,我很喜歡python ...請解釋@ cricket_007 –

1

注意,用於查看文件的十六進制轉儲,有在大多數操作系統上都可用如果你想要做的是十六進制轉儲文件,認爲這些方案之一:

  • od(八場,其中有一個-x-t x選項)窗口
  • 下可用
  • hexdump
  • xd工具
  • 在線十六進制轉儲工具,如this one
+0

我需要這在純Python;) –

3

使用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