如您只需要10元我會使用:
print(" ".join("%0.2X" % s for s in x[:10]))
,或者如果你想包括整個行:
print(" ".join("%0.2X" % s for s in x))
仍然有一個bug從你的初始版本。您的輸入被讀取爲每行一個字符串。類型轉換「%0.2X」失敗(「%s」起作用)。我認爲你無法讀取每行的二進制文件。 \ n只是另一個字節,不能被解釋爲換行符。
當你有一個int值序列時,你可以用group方法創建n個元素的分區。組方法在itertools recipies。
from itertools import zip_longest
def grouper(n, iterable):
args = [iter(iterable)] * n
return zip_longest(fillvalue=None, *args)
width=10
x = range(1,99)
for group in grouper(width, x):
print((" ".join("%0.2X" % s for s in group if s)))
輸出:
01 02 03 04 05 06 07 08 09 0A
0B 0C 0D 0E 0F 10 11 12 13 14
15 16 17 18 19 1A 1B 1C 1D 1E
1F 20 21 22 23 24 25 26 27 28
29 2A 2B 2C 2D 2E 2F 30 31 32
33 34 35 36 37 38 39 3A 3B 3C
3D 3E 3F 40 41 42 43 44 45 46
47 48 49 4A 4B 4C 4D 4E 4F 50
51 52 53 54 55 56 57 58 59 5A
5B 5C 5D 5E 5F 60 61 62
要bytes_from_file讀取字節作爲發電機:
def bytes_from_file(name):
with open(name, 'rb') as fp:
def read1(): return fp.read(1)
for bytes in iter(read1, b""):
for byte in bytes:
yield byte
x = bytes_from_file('out.fmt') #replaces x = range(1,99)
是否有一個原因,爲什麼你把每行只有10個元素? –
是的,這只是一個例子。其實我需要每行32個元素= 16個字節。 – Smith