2016-02-19 19 views
6

Python'da bir dosyanın onaltılık verilerini bir listeye hex diyelim mi? Python: Dosyadan hex'i listeye mi okuyorsunuz?

Yani hex

bu olacaktır: Ben istemiyorum

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

sonra, bir dizeye bölünmüş okumak zorunda. Bu büyük dosyalar için yoğun bellek.

+1

'u okumanızı tavsiye ederiz. – jsfan

+0

Üzgünüz, düzeltmek için –

+2

[http://stackoverflow.com/questions/3964245/convert-file-to-hex-string-python](http://stackoverflow.com/questions/3964245/convert-file-to- hex-string-python) Bu kesin bir cevap değil, muhtemelen sizi doğru yönde zorlayacaktır. –

cevap

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

Çıktı

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

Sadece open(filename).read() için s değiştirmek ve iyi olmalıdır.

with open('/path/to/some/file', 'r') as fp: 
    hex_list = ["{:02x}".format(ord(c)) for c in fp.read()] 

Veya, büyük dosyalar için bellekte aynı anda tüm listeyi tutmak istemiyorsanız.

hex_list = ("{:02x}".format(ord(c)) for c in fp.read()) 

ve değerleri almak için,

list(hex_list) 
+0

Sadece emin olun - bu kazandı ' Büyük dosyalar ile yavaş mı? –

+0

Eğer bu konuda endişe ediyorsanız 'hex_list' bir jeneratör yapabilir –

+0

Üzgünüz, python için yeni ... lütfen açıkla @ cricket_007 –

1

dosyaların onaltılık döker görüntülemek için vardır unutmayın

next(hex_list) 

jeneratörden kalan tüm değerleri almak için aramaya devam çoğu işletim sisteminde kullanılabilir programlar.

  • od (bir -x veya -t x seçeneği vardır sekizlik dökümü,) pencereler
  • altında kullanılabilir
  • hexdump
  • xd yarar: Yapmak istediğiniz tüm onaltılık dosyayı dökümü ise, bu programlardan birini düşünün
  • this one gibi çevrimiçi altıgen boşaltma araçları.
+0

denemedim saf Python;) –

3

Python 3'ü kullanarak, giriş dosyanızın gösterdiğiniz örnek baytları içerdiğini varsayalım. Örneğin, içeriğini yorumlamak hiçbir çaba göstermeden, biz girdi dosyasındaki her bayt onaltılık gösterimi, ikili modda dosyayı açmak güzel olurdu istiyorum verilmiş, Şimdi bu

>>> inp = bytes((170,12*16+13,255,15)) # i.e. b'\xaa\xcd\xff\x0f' 
>>> with open(filename,'wb') as f: 
...  f.write(inp) 

gibi oluşturabilir karakter/dizeleri

>>> 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'] 

dosya büyükse (veya yanlışlıkla UnicodeDecodeError: 'utf-8' codec can't decode byte 0xaa in position 0: invalid start byte üzerine basılmayacak) gibi, bir defada veya parçalar halinde bir karakter okumak isteyebilirsiniz. Bu amaçla, this Q&A

İlgili konular