Как создать массив numpy из txt файла

Я импортирую текстовый файл с

np.genfromtxt(file_name, dtype='str')

Я мог бы, например, получить следующий массив numpy

['aaa' 'aaa' 'a']

То, что я хотел бы получить, это массив numpy, похожий на этот

[['a', 'a', 'a'], ['a', 'a', 'a'], ['a', 'a', 'a']]

Имейте в виду, что текстовый файл имеет только 1 a в последней строке, поэтому скрипт должен автоматически добавить еще 2 a, чтобы соответствовать самому длинному списку в массиве.

мне удалось сделать запятые между 3 строками с помощью

[s.replace(' ', ',') for s in file]

Но, похоже, это не сработает, если я заменю пробел на] [.

какие-либо предложения?

Что будет, если у вас ['aaa' 'abc' 'a']

Rakesh 31.10.2018 12:30

тогда он вернет массив типа numpy [['a', 'a', 'a'], ['a', 'b', 'c'], ['a', 'a', 'a' ]] будет возвращено только значение 'a', если не было значения

Magnus Keinicke 31.10.2018 12:44
1
2
1 034
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы ищете что-то вроде

str = "'aaa' 'aaa' 'a'"
str2 = str.replace("'a'","'a' 'a' 'a'")
str3 = str2.replace("'aaa' ","'a' 'a' 'a',")
str4 = str3.replace("'aaa'","'a' 'a' 'a',")
my_data2 = [str4.split(',') for x in str4.split('|')]
print(my_data2)

ПРИМЕЧАНИЕ: извините за мой основной ответ, это мой самый первый ответ. Надеюсь, это помогло.

РЕДАКТИРОВАТЬ

[s.replace("'a'","'a','a','a'") for s in file] # add 3 'a's at the last one
[s.replace("'aaa' ","'a','a','a' ") for s in file] # split each one of the 3 'aaa's in the first to items
[s.split(" ") for s in file] # create 3 item "'a', 'a', 'a'" list per line

Спасибо за ответ, но я ищу не это. Я ищу фрагмент кода, в котором я мог бы написать свое имя файла, и он дал бы мне желаемый массив numpy. Я уже сделал это так, как описано, но мне нужна последняя часть.

Magnus Keinicke 31.10.2018 12:58
Ответ принят как подходящий
def func(file_name):
  arr = np.genfromtxt(file_name, dtype='str')
  # this line is in case you omitted the ',' between strings in loaded numpy array from your question
  # arr = arr.tolist().split() 
  l = []
  for i in arr:
    el = list(i)
    while len(el) < 3:
      el.append('a')
    l.append(el)
return np.array(l)

Я надеюсь, это тебе подходит.

Вы можете мне объяснить, как это сделать, используя только список? потому что, когда я пробую это в списке, я получаю сообщение об ошибке. Я переделываю это по-другому и получаю правильный ответ, пока не наложу на него np.array, тогда у меня нет запятых в массиве numpy

Magnus Keinicke 31.10.2018 13:48

Не могли бы вы пояснить свой вопрос немного лучше? Я не уверен, что понимаю, о чем ты меня спрашиваешь

Novak 31.10.2018 14:29

Использование понимания списка.

Бывший:

import numpy as np

data = np.genfromtxt(filename, dtype='str')
mValue = len(max(data, key=lambda x: len(x)))
print([[j for j in i.ljust(mValue, i[0])] for i in data])

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