2016-12-11 29 views
0

假设我们有一个numpy.ndarray和numpy.str_元素。例如,下面ARR是有四个numpy.str_元素这样的numpy.ndarray:漂亮的编写和打印numpy ndarray(Python)的字符串元素

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

有没有一种方法可以让我写的arr内容到一个文件没有[]没有'每个numpy.str_元素?

也就是说,是写入arr这样的:

\tSTART\t 0\n12345 ABCDEFG1A 2B3\nE N D 

此外,可以予打印每行的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) 

我得到什么(并没有什么writtent到文件)。

+1

只是把它当作一个字符串列表。 '''.join(arr)'为单个字符串。或按元素逐个写入文件。无论如何,'\ n'和'\ t'可能需要特殊处理,具体取决于您希望渲染的方式。 – hpaulj

+0

在python中,'['\ tSTART \ t 0 \ n''12345 ABCDEFG''1A 2B3C''\ nE N D']'和'['\ tSTART \ t 0 \ n','12345 ABCDEFG',' 1A 2B3C','\ nE N D']'是非常不同的东西。我假设你是指后者? – Eric

+0

@Eric我的意思是'['\ tSTART \ t 0 \ n''12345 ABCDEFG''1A 2B3C''\ nE N D']'。带有numpy.str_元素的numpy ndarray。没有逗号。 –

回答

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 
+0

该操作也可能正在寻找'.encode('unicode_escape')'repr没有引号 – Eric

+0

这似乎是个窍门。 – hpaulj

+0

@hpaulj非常感谢您的完整答复。你能解释一下'f.write(b'\ n')'是做什么的?另外,请让我知道在控制台中逐行打印(不写)? –