漂亮的编写和打印 numpy ndarray (Python) 的字符串元素



假设我们有一个包含numpy.str_元素的numpy.ndarray。例如,arr 下面是 numpy.ndarray numpy.str_四个元素,如下所示:

>>> print(arr)
['tSTARTt  0n'  '12345 ABCDEFG'  '1A 2B3C'  'nE N D']

有没有办法将arr的内容写入一个文件,而没有[]也没有每个numpy.str_元素的'

也就是说,像这样arr

tSTARTt  0n12345 ABCDEFG1A 2B3nE N D

另外,我可以每行打印一个元素numpy数组的元素吗?理想情况下,这里也没有[]也没有'

也就是说,要像这样打印arr

tSTARTt  0n
12345 ABCDEFG
1A 2B3
nE N D

编辑

(1)如果试试这个

with open(resultfile, 'w') as f:
f.write(str(arr))

我得到

['tSTARTt  0n'  '12345 ABCDEFG'  '1A 2B3C'  'nE N D']

(2)如果我尝试这个(如GreenHawk1220的答案所建议的那样)

A = str('n'.join(arr))
B = ''.split(A)
del B[0] 
# del B[-1] #Deletes end characters # *THIS GIVES INDEXERROR*
C = ''.join(B)
print(C)
with open(resultfile, 'w') as f:
f.write(C)

什么也没得到(也没有写入文件)。

创建数组:

In [2]: arr = np.array(['tSTARTt  0n',  '12345 ABCDEFG',  '1A 2B3C',  'nE N D'])
In [3]: 
In [3]: arr
Out[3]: 
array(['tSTARTt  0n', '12345 ABCDEFG', '1A 2B3C', 'nE N D'], 
dtype='<U13')

联接成一个字符串;相当于''.join(arr.tolist())(实际''.join(list(arr)))

In [4]: ''.join(arr)
Out[4]: 'tSTARTt  0n12345 ABCDEFG1A 2B3CnE N D'

print/str表示形式在nt上展开。

In [5]: print(''.join(arr))
START     0
12345 ABCDEFG1A 2B3C
E N D

repr引用他们的话:

In [6]: print(repr(''.join(arr)))
'tSTARTt  0n12345 ABCDEFG1A 2B3CnE N D'

f.write有同样的问题:

In [8]: with open('test.txt','w') as f:
...:     f.write(''.join(arr))
...:     f.write('n')
...:     
In [9]: cat test.txt
START     0
12345 ABCDEFG1A 2B3C
E N D
In [10]: with open('test.txt','w') as f:
...:     f.write(repr(''.join(arr)))
...:     f.write('n')
...:     
In [11]: cat test.txt
'tSTARTt  0n12345 ABCDEFG1A 2B3CnE N D'

这不是真正的字符串数组问题。 这是一个关于如何打印/写入包含nt的字符串的问题。

评论后:

In [18]: with open('test.txt','wb') as f:
...:     f.write(''.join(arr).encode('unicode_escape'))
...:     f.write(b'n')
In [19]: cat test.txt
tSTARTt  0n12345 ABCDEFG1A 2B3CnE N D

对于单个字符串:

In [21]: with open('test.txt','wb') as f:
...:     for s in arr:
...:         f.write(s.encode('unicode_escape'))
...:         f.write(b'n')
...:         
In [22]: cat test.txt
tSTARTt  0n
12345 ABCDEFG
1A 2B3C
nE N D

以防万一它不明显,我正在使用 Ipython 和 Py3。 Py2 可能有所不同。

encode创建一个带有额外\t等的字节串。.decode可用于将其变回Unicode以进行整齐的打印:

In [6]: for s in arr: print(s.encode('unicode_escape').decode())
tSTARTt  0n
12345 ABCDEFG
1A 2B3C
nE N D

最新更新