我在单独的.txt文件中有以下字符串:
L#$KJ#()JSEFS(DF)(SD*F
#KJ$H#K$JH@#K$JHD)
SF SDFLKJ#{P@$OJ{SDPFODS{PFO{
#K$HK#JHSFHD(*SHF)SF{HP
#L$H@”#$H”@#L$KH#”@L$K
#~L$KJ#:$SD)FJ)S(DJF)(S
#$KJH#$
SDLKFJD(FJ)SDJFSDLFKS
~L#$KJ:@LK$#J$
LSJDF(S*JDF(*SJDF(*J(DSF*J
我必须按列位置获取每个元素,并输出一个元素出现在列中的次数。例如,位置:0或第1列(S:20.0%#:50.0%L:20.0%〜:10.0%)
我已经使用NumPy在python中编写了这个脚本来按行创建一个数组数组但是得到“TypeError:list indices必须是整数,而不是元组”
当我尝试打印第一列时,这是脚本:
import numpy as np
from sys import argv
script, filename = argv
target = open(filename, 'r')
y = []
for x in range(0, 10):
y.append(np.array(list(target.readline())))
print y[:,1]
我做错了什么?
答案 0 :(得分:0)
y[:, 1]
是y[(slice(None, None, None), 1)]
的合成糖,这使您更明显地尝试将tuple
传递给y.__getitem__
。
由于y
是list
,因此不起作用 1
也许你的意思是:
y[:1]
挑出前两项?
1 ( 使用尺寸合适的numpy.ndarray
,这可能会导致您的混淆)
功能
答案 1 :(得分:0)
从您的文字txt
开始,我可以将其拆分为多行,然后使用zip(*lines)
将其重新排列为“'列”。由于线条长度不同,我会使用itertools.izip_longest
:
lines = txt.splitlines()
[l for l in itertools.izip_longest(*lines)]
制造
[('L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'),
('#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'),
('$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'),
...
(None, None, 'O', None, 'K', None, None, None, None, None),
(None, None, '{', None, None, None, None, None, None, None)]
或者如果我指定一个' _' fillvalue:
X=[l for l in itertools.izip_longest(*lines, fillvalue=' ')]
[('L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'),
('#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'),
('$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'),
('K', '$', 'S', 'H', 'H', '$', 'J', 'K', '$', 'D'),
('J', 'H', 'D', 'K', '@', 'K', 'H', 'F', 'K', 'F'),
...
(' ', ' ', 'P', ' ', 'L', ' ', ' ', ' ', ' ', 'J'),
(' ', ' ', 'F', ' ', '$', ' ', ' ', ' ', ' ', ' '),
(' ', ' ', 'O', ' ', 'K', ' ', ' ', ' ', ' ', ' '),
(' ', ' ', '{', ' ', ' ', ' ', ' ', ' ', ' ', ' ')]
或作为等长字符串的列表:
[''.join(x) for x in X]
或作为一个字符数组(29 x 10):
np.array(X)
array([['L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'],
['#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'],
['$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'],
...
[' ', ' ', '{', ' ', ' ', ' ', ' ', ' ', ' ', ' ']],
dtype='|S1')
您可以对每个元组,字符串或行进行频率计数。