numpy ndarray(Python)的漂亮的write和print字符串元素

2024-09-25 04:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个努比·恩达雷与纽比街元素。例如,arr下面是努比·恩达雷有四个街道像这样的元素:

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

有没有一种方法可以将arr的内容写入到一个文件中,而不使用[]每个numpy.str_元素的{},而不使用?在

也就是说,这样写arr

^{pr2}$

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

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

\tSTART\t  0\n
12345 ABCDEFG
1A 2B3
\nE N D

编辑

(1)如果试试这个

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

我明白了

['\tSTART\t  0\n'  '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)

我没有得到任何东西(文件中没有可写的内容)。在


Tags: 文件numpy元素内容aswithopenwrite
1条回答
网友
1楼 · 发布于 2024-09-25 04:29:37

制作阵列:

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))

^{pr2}$

print/str表示在\n和{}上展开。在

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和{}的字符串的问题。在

评论后:

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

以防不明显,我在Py3中使用Ipython。Py2可能不同。在

encode创建了一个带有额外\\t等的bytestring。.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

相关问题 更多 >