Получение ошибки «объект списка не вызывается» при попытке преобразования из шестнадцатеричного в двоичный файл - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь написать код, который принимает файл с точками данных в шестнадцатеричном формате и преобразовывает их в двоичный файл.Мне нужно проверить, что 2-ая точка входа преобразованного двоичного файла является действительной точкой (равной 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 голосов
/ 19 марта 2019

Ваша ошибка, кажется, строка

check = bytes.fromhex[{line(col)}]

line - это список, поэтому для индексации необходимо использовать [], например, line[col].

Кроме того, fromhex - это функция, поэтому она должна быть bytes.fromhex(line[col]). Я не уверен, почему у вас есть фигурные скобки вокруг line[col], поскольку это даст вам набор, а fromhex выдаст ошибку.

ПРИМЕЧАНИЕ Если вы хотите перейти от шестнадцатеричного к двоичному, простое решение (в Python3) -

check = bin(int(line[col], 16))

Это преобразует шестнадцатеричную строку в соответствующее шестнадцатеричное целое число, а затем вызывает bin, превращая ее в двоичную строку, которая даст вам то, что вам нужно.

0 голосов
/ 19 марта 2019

Предположим, line[col] - шестнадцатеричная строка, например, "DEADBEEF", вы должны написать эту строку как:

check = bytes.fromhex(line[col])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...