尝试从十六进制转换为二进制时,出现“列表对象不可调用”错误

时间:2019-03-19 19:52:08

标签: python arrays binary

我正在尝试编写一个代码,该代码接受带有十六进制数据点的文件,并将其转换为二进制。我需要检查转换后的二进制文件的第二个入口点是否是有效点(等于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()

2 个答案:

答案 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会将其转换为二进制字符串,这将为您提供所需的内容。