我遇到一个问题:
我们提取了一个外星zip文件,它是一堆PNG文件,但我们认为其中只有一个是有效的。使用魔术字节来确定它是哪个。 提示:查找并读取正确的文件以获取该标志。
所有png文件都存储在/ tmp目录中。经过几次尝试解决这个问题,我到现在为止都还没到。我的代码运行正常,但是为每个文件打印no
,但根据我的代码,它们都不是正确的文件。
到目前为止,这是我的代码:
import glob,os
magic_numbers = {'.png': bytes([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])}
max_read_size = max(len(m) for m in magic_numbers.values()) # get max size of magic numbers of the dict
os.chdir("/tmp")
for x in glob.glob("*.png"):
with open(x, 'rb') as fd:
file_head = fd.read(max_read_size)
if file_head.startswith(magic_numbers['.png']):
print("It's a PNG File")
else:
print("no")
很明显,我做错了什么,但我不知道是什么。循环有问题吗?我应该如何使用魔术字节来识别文件?
答案 0 :(得分:0)
您的代码需要稍作调整,在单词Inventory Allocation =
VAR TotalInventory =
LOOKUPVALUE ( Inventory[Qty On Hand], Inventory[Item], 'Open Orders'[Item] )
VAR CurrItem = 'Open Orders'[Item]
VAR CurrDate = 'Open Orders'[Due Date]
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
REMOVEFILTERS ( 'Open Orders' ),
Inventory[Item] = CurrItem,
'Open Orders'[Due Date] < CurrDate
)
RETURN
IF (
AlreadyOrdered > TotalInventory,
0,
MIN ( 'Open Orders'[Qty Open], TotalInventory - AlreadyOrdered )
)
前面加一个点,就好像文件具有扩展名一样。另外,打印png
。 (CS_Game挑战?)。运行此:
file_head
它应打印如下内容:
import glob, os
magic_numbers = {'png': bytes([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])}
max_read_size = max(len(m) for m in magic_numbers.values()) # get max size of magic numbers of the dict
os.chdir("/tmp")
for x in glob.glob("*png"):
with open(x, 'rb') as fd:
file_head = fd.read()
print(file_head)
if file_head.startswith(magic_numbers['png']):
print("It's a PNG File")
else:
print("no")
您的旗帜可能与我的不同。
干杯!