【发布时间】:2017-06-14 17:06:23
【问题描述】:
我有一个 Python 程序,它分析文件头并决定它是哪种文件类型。 (https://github.com/LeoGSA/Browser-Cache-Grabber)
问题如下: 我读取了文件的前 24 个字节:
with open (from_folder+"/"+i, "rb") as myfile:
header=str(myfile.read(24))
然后我在其中寻找模式:
if y[1] in header:
shutil.move (from_folder+"/"+i,to_folder+y[2]+i+y[3])
在哪里y = ['/video', r'\x47\x40\x00', '/video/', '.ts']
y[1] 是模式并且 = r'\x47\x40\x00'
文件里面有,如下图所示。
程序在文件头中没有找到这个模式(r'\x47\x40\x00')。
所以,我尝试打印标题:
你看到了吗? Python 将其视为 'G@' 而不是 '\x47\x40'
如果我在标题中搜索 'G@'+r'\x00' - 一切正常。它找到了。
问题:我做错了什么?我想寻找r'\x47\x40\x00' 并找到它。不是为了一些奇怪的 'G@'+r'\x00'。
或
为什么 python 将前两个数字视为 'G@' 而不是 '\x47\x40',而它在 HEX 中看到的其余标题?有办法解决吗?
【问题讨论】:
-
我会将您从格式化为 HEX 的文件中读出的每一行写入一个临时字符串,然后比较该字符串。
-
您使用的是哪个 Python 版本?
-
Python 3.4.3 和 3.5
-
是的,我找到了这样的解决方案:使用 open (from_folder+"/"+i, "rb") as myfile: header=myfile.read(24) header = str(binascii .hexlify(header))[2:-1] 4740001b0000b00d0001c100000001efff3690e23dffffff
-
如果您不清楚这是怎么发生的,请在交互模式下尝试
bytes(range(256)),看看它会给您带来什么。
标签: python file python-3.x header hex