Невозможно прочитать текстовый файл в 2D-массив

Я попытался прочитать текстовый файл в 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]]]

Элементы представляют собой шестнадцатеричные числа.

Добро пожаловать в SO. К сожалению, это не дискуссионный форум или обучающая служба. Найдите время, чтобы прочитать Как спросить и другие ссылки на этой странице. Вам следует потратить некоторое время на проработку Учебник, попрактиковавшись в примерах. Это даст вам представление об инструментах, которые может предложить Python, и вы даже можете начать получать идеи для решения вашей проблемы.

wwii 23.04.2018 00:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
108
3

Ответы 3

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)

Другие вопросы по теме