Я попытался прочитать текстовый файл в 2D-массиве через Python. Текстовый файл выглядит так:
7ee0c0d15fe800000f80202278e0c0f1
00007ee0c0d15fc000000f802022c0f1
Мне нужен формат 2D-массива, например:
[[[7],[e],[e],[0],[c],[0],[d],[1],[5],[f],[e],[8],[0],[0],[0],[0],[0],[f],[8],[0],[2],[0],[2],[2],[7],[8],[e],[0],[c],[0],[f],[1]],
[[0],[0],[0],[0],[7],[e],[e],[0],[c],[0],[d],[1],[5],[f],[c],[0],[0],[0],[0],[0],[0],[f],[8],[0],[2],[0],[2],[2],[c],[0],[f],[1]]]
Элементы представляют собой шестнадцатеричные числа.






with open('filename') as f:
array2d = [[int(c,16) for c in line.rstrip()] for line in f]
Ваш "требуемый" вывод будет 3d, а не 2d - вот как получить 2d вывод:
Создать файл:
data = """7ee0c0d15fe800000f80202278e0c0f1
00007ee0c0d15fc000000f802022c0f1"""
fn = "someFile.txt"
with open(fn,"w") as f:
f.write(data)
Прочитать файл:
fn = "someFile.txt"
k = []
with open(fn,"r") as f:
for line in f:
k.append(list(line.rstrip("\n"))) # convert each line into list, strip \n
print(k) # these are all strings
# convert to int
d = [ [int('0x'+i,16) for i in x] for x in k]
print(d) # 2d list
Выход:
[['7', 'e', 'e', '0', 'c', '0', 'd', '1', '5', 'f', 'e', '8',
'0', '0', '0', '0', '0', 'f', '8', '0', '2', '0', '2', '2',
'7', '8', 'e', '0', 'c', '0', 'f', '1'],
['0', '0', '0', '0', '7', 'e', 'e', '0', 'c', '0', 'd', '1',
'5', 'f', 'c', '0', '0', '0', '0', '0', '0', 'f', '8', '0',
'2', '0', '2', '2', 'c', '0', 'f', '1']]
[[7, 14, 14, 0, 12, 0, 13, 1, 5, 15, 14, 8, 0, 0, 0, 0, 0, 15,
8, 0, 2, 0, 2, 2, 7, 8, 14, 0, 12, 0, 15, 1],
[0, 0, 0, 0, 7, 14, 14, 0, 12, 0, 13, 1, 5, 15, 12, 0, 0, 0,
0, 0, 0, 15, 8, 0, 2, 0, 2, 2, 12, 0, 15, 1]]
Чтобы перейти к вашему выводу, просто оберните целочисленное преобразование в список из 1 элемента:
# convert to 3d int
d3 = [ [ [int('0x'+i,16)] for i in x] for x in k]
print(d3) # converted to int
Выход:
[[[7], [14], [14], [0], [12], [0], [13], [1], [5], [15], [14], [8], [0], [0],
[0], [0], [0], [15], [8], [0], [2], [0], [2], [2], [7], [8], [14], [0],
[12], [0], [15], [1]],
[[0], [0], [0], [0], [7], [14], [14], [0], [12], [0], [13], [1], [5], [15],
[12], [0], [0], [0], [0], [0], [0], [15], [8], [0], [2], [0], [2], [2],
[12], [0], [15], [1]]]
Чтобы в выводе оставались "шестнадцатеричные строки", не выполняйте целочисленное преобразование:
# convert to 3d int
d3h = [ [ [i] for i in x] for x in k]
print(d3h) # converted to int
Выход:
[[['7'], ['e'], ['e'], ['0'], ['c'], ['0'], ['d'], ['1'], ['5'], ['f'], ['e'],
['8'], ['0'], ['0'], ['0'], ['0'], ['0'], ['f'], ['8'], ['0'], ['2'], ['0'],
['2'], ['2'], ['7'], ['8'], ['e'], ['0'], ['c'], ['0'], ['f'], ['1']],
[['0'], ['0'], ['0'], ['0'], ['7'], ['e'], ['e'], ['0'], ['c'], ['0'], ['d'],
['1'], ['5'], ['f'], ['c'], ['0'], ['0'], ['0'], ['0'], ['0'], ['0'], ['f'],
['8'], ['0'], ['2'], ['0'], ['2'], ['2'], ['c'], ['0'], ['f'], ['1']]]
(или короче:
with open(fn,"r") as f:
k = [ [ [k] for k in i] for i in (list(line.strip()) for line in f)]
print(k)
что это тот же результат)
Это просто чтобы иметь представление
import numpy as np
x,y = np.genfromtxt('data.txt',dtype='str', usecols=(0,1), unpack=True)
x_letter = []
y_letter = []
letter = [x_letter]
for letter in x:
letters = [letter]
x_letter.append(letters)
for letter in y:
letters = [letter]
y_letter.append(letters)
final = [x_letter,y_letter]
print (final)
Добро пожаловать в SO. К сожалению, это не дискуссионный форум или обучающая служба. Найдите время, чтобы прочитать Как спросить и другие ссылки на этой странице. Вам следует потратить некоторое время на проработку Учебник, попрактиковавшись в примерах. Это даст вам представление об инструментах, которые может предложить Python, и вы даже можете начать получать идеи для решения вашей проблемы.