我正在尝试编写一个代码,该代码接受带有十六进制数据点的文件,并将其转换为二进制。我需要检查转换后的二进制文件的第二个入口点是否是有效点(等于1)。如果所有四个转换后的二进制文件均有效,则将该行移至新文件
f = open("valid.txt","w+")
with open('pz_muon_halflife.txt') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=' ')
col = 1
for line in csv_reader:
while col <=5:
if col == 5:
f.write(f'{" ".join(line)}')
else:
check = bytes.fromhex[{line(col)}] #converts the hex in the column to binary (error here)
if check[:2] == 1: #checks to see if the 3rd entry is valid
col += 1 #resets col to 1
else: #value is invalid
col = 6 #sets column to 6 so that the while loop ends
col = 1
print(f'Processed {line_count} lines.')
f.close()
答案 0 :(得分:0)
假设line[col]
是一个十六进制字符串,例如“ DEADBEEF”,您应将该行写为:
check = bytes.fromhex(line[col])
答案 1 :(得分:0)
您的错误似乎是那一行
check = bytes.fromhex[{line(col)}]
line
是一个列表,因此要索引到其中,您需要使用[]
,例如line[col]
。
此外,fromhex
是一个函数,因此应为bytes.fromhex(line[col])
。我不确定您为什么line[col]
周围有花括号,因为那会给您一个位置,而fromhex
会抛出错误。
注意如果您希望从十六进制转换为二进制,那么一个简单的解决方案(在Python3中)是
check = bin(int(line[col], 16))
这会将十六进制字符串转换为相应的十六进制整数,然后对其调用bin
会将其转换为二进制字符串,这将为您提供所需的内容。