Позволяет имитировать файл со списком строк текста:
In [401]: txt="""\
AAAAAAAAAAAA
BB BBBBBBBBB
CCCCCCCCCCCC
DDDDDD DDDDD
"""
In [402]: txt=txt.splitlines()
In [403]: txt
Out[403]: ['AAAAAAAAAAAA', 'BB BBBBBBBBB', 'CCCCCCCCCCCC', 'DDDDDD DDDDD']
Как вы загрузке в массив? Часто мы используем loadtxt
, но для столбцов данных
In [404]: np.loadtxt(txt,dtype=str)
Out[404]:
array(['AAAAAAAAAAAA', 'BB', 'CCCCCCCCCCCC', 'DDDDDD'],
dtype='|S12')
Нет использования.
Давайте split
на этих линиях
In [410]: [x.split() for x in txt]
Out[410]: [['AAAAAAAAAAAA'], ['BB', 'BBBBBBBBB'], ['CCCCCCCCCCCC'], ['DDDDDD', 'DDDDD']]
Линии с «белого пространства» превращаются в списки более чем на 1 срок
In [411]: [len(x.split())>1 for x in txt]
Out[411]: [False, True, False, True]
Так 2 строки имеют ошибки.
Я мог бы превратить txt
в массив с одной буквой на столбе, передав строки через list()
. Это дает np.array
список, имеющих одинаковую длину.Пробел/пробел в конце строки может вызвать проблемы.
In [414]: A=np.array([list(x) for x in txt])
In [415]: A
Out[415]:
array([['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'],
['B', 'B', ' ', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
['D', 'D', 'D', 'D', 'D', 'D', ' ', 'D', 'D', 'D', 'D', 'D']],
dtype='|S1')
я мог проверить этот массив для ' '
персонажей что-то вроде:
In [418]: np.any(A==' ',axis=1)
Out[418]: array([False, True, False, True], dtype=bool)
Если линии имеют разную длину, то это array
не будет 2d. Вместо этого он будет содержать 1d, содержащий списки.
Как было предложено в комментарии я мог бы сделать массив из целых строк, и использовать view
к «разделяй» их в символы.
loadtxt
с «нефункционирующих» разделителем бы создать 2d массив как:
In [434]: np.array([[x] for x in txt])
Out[434]:
array([['AAAAAAAAAAAA'],
['BB BBBBBBBBB'],
['CCCCCCCCCCCC'],
['DDDDDD DDDDD']],
dtype='|S12')
И затем разделить его на персонажей:
In [435]: np.array([[x] for x in txt]).view('S1')
Out[435]:
array([['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'],
['B', 'B', ' ', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
['D', 'D', 'D', 'D', 'D', 'D', ' ', 'D', 'D', 'D', 'D', 'D']],
dtype='|S1')
Вы подумали о том, как читать эти данные в первую очередь? Пробелы могут вызвать проблему. –
@ AndrasDeak Вот почему я спрашиваю. Если я просто загружу в массив, записи могут быть помещены в странные места. Однако, если я сначала сделаю какой-то алгоритм поиска для «пробелов», это может занять все время. – ShanZhengYang
Есть ли причина, по которой вы не хотите читать во всем файле в виде строки: 'open (filename, 'r') как f: data = f.read()', а затем проверить, находится ли в этом пространстве пробел строка с '' 'в data'? – Reti43