让与的文本行列表模拟文件:
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号线有错误。
我可以通过list()
将字符串传递给每列有单个字母的数组txt
。这给出了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
与“非正常工作”分隔符将创建一个二维数组,如:
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()',然后检查是否有空格数据中有'''的字符串? – Reti43