假设我们有一个带numpy.str_元素的numpy.ndarray。例如,下面的arr是numpy.ndarray,有四个像这样的numpy.str_元素:
>>> print(arr)
['\tSTART\t 0\n' '12345 ABCDEFG' '1A 2B3C' '\nE N D']
我是否可以将<{1}}的内容1>}写入文件而不 arr
,[
和< em>没有每个]
元素的'
?
就是这样,写 numpy.str_
:
arr
另外,我可以打印 \tSTART\t 0\n12345 ABCDEFG1A 2B3\nE N D
数组每行一个元素的元素吗?理想情况下,这里也没有numpy
,[
和没有 ]
。
就是这样,打印 '
:
arr
修改
(1)如果试试这个
\tSTART\t 0\n
12345 ABCDEFG
1A 2B3
\nE N D
我得到了
with open(resultfile, 'w') as f:
f.write(str(arr))
(2)如果我尝试这个(按照GreenHawk1220的回答建议)
['\tSTART\t 0\n' '12345 ABCDEFG' '1A 2B3C' '\nE N D']
我得到没有(并且该文件没有任何内容)。
答案 0 :(得分:2)
制作阵列:
In [2]: arr = np.array(['\tSTART\t 0\n', '12345 ABCDEFG', '1A 2B3C', '\nE N D'])
In [3]:
In [3]: arr
Out[3]:
array(['\tSTART\t 0\n', '12345 ABCDEFG', '1A 2B3C', '\nE N D'],
dtype='<U13')
加入一个字符串;相当于''.join(arr.tolist())
(实际为''.join(list(arr))
)
In [4]: ''.join(arr)
Out[4]: '\tSTART\t 0\n12345 ABCDEFG1A 2B3C\nE N D'
print/str
表示扩展于\n
和\t
。
In [5]: print(''.join(arr))
START 0
12345 ABCDEFG1A 2B3C
E N D
repr
引用它们:
In [6]: print(repr(''.join(arr)))
'\tSTART\t 0\n12345 ABCDEFG1A 2B3C\nE 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
'\tSTART\t 0\n12345 ABCDEFG1A 2B3C\nE N D'
这实际上不是字符串数组问题。这是一个如何打印/写入包含\n
和\t
的字符串的问题。
评论之后:
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
\tSTART\t 0\n12345 ABCDEFG1A 2B3C\nE 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
\tSTART\t 0\n
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())
\tSTART\t 0\n
12345 ABCDEFG
1A 2B3C
\nE N D