2016-12-11 8 views
0

numpy.ndarrayにnumpy.str_要素があるとします。例えば、編曲の下にこのような4つの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 

EDIT

(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) 'を1つの文字列に変換します。要素ごとにファイル書き込みを行います。それにかかわらず、 '\ n'と' \ t'はレンダリング方法に応じて特別な処理が必要な場合があります。 Pythonで – hpaulj

+0

、 '[ '\ tSTARTの\ tの0 \ n' は '12345 ABCDEFG '1A 2B3C' '\数nE N D']'と '[ '\ tSTARTの\ 0 \ T N'、 '12345 ABCDEFG'、' 1A 2B3C '、' \ nE N D '] 'は非常に異なるものです。後者を意味すると思いますか? – Eric

+0

@Eric私は '[ '\ tSTARTの\ 0 \ N T' '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') 

は、1つの文字列に参加。 ''.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を含む文字列の印刷/書き込み方法の問題です。

コメント次のとおりです。それは私がPY3とIpythonを使用している、明らかにされていません念の

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 

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 

、個々の文字列の。 Py2は異なるかもしれません。

encode.decodeがきちんと印刷用バックユニコードにそれを回すために使用することができますなどの余分な\\tとバイト文字列を作成します。

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

トリックを行うようだOPも引用符 – Eric

+0

なしのreprのために '' .encode(「unicode_escape」)を探している可能性があります。 – hpaulj

+0

@hpauljあなたの完全な回答をありがとうございました。 'f.write(b '\ n')'が何をしているのかを教えてください。また、コンソールで行単位で印刷することを知らせてください(書込みではありません)。 –