(ipthon-qt
端子)私が行うことができます:PY2と3の両方では
In [12]: b=[u'maça', u'banana',u'morango']
In [13]: np.savetxt('test.txt',b,fmt='%s')
In [14]: cat test.txt
ma�a
banana
morango
In [15]: with open('test1.txt','w') as f:
...: for l in b:
...: f.write('%s\n'%l)
...:
In [16]: cat test1.txt
maça
banana
morango
savetxt
と 'wb'、バイトモードでの保存を主張しています。エラーラインにはasbytes
の機能があります。
私の例ではb
はリストですが、それは問題ではありません。
In [17]: c=np.array(['maça', 'banana','morango'])
In [18]: c
Out[18]:
array(['maça', 'banana', 'morango'],
dtype='<U7')
と同じです。 py3では、デフォルトの文字列型はunicodeなので、u
タグは不要ですが、大丈夫です。 Python2では
私は無地のライトを使用してエラーを取得
>>> b=[u'maça' u'banana',u'morango']
>>> with open('test.txt','w') as f:
... for l in b:
... f.write('%s\n'%l)
...
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 2: ordinal not in range(128)
encode
を追加する素敵な出力が得られます。
>>> b=[u'maça', u'banana',u'morango']
>>> with open('test.txt','w') as f:
... for l in b:
... f.write('%s\n'%l.encode('utf-8'))
0729:~/mypy$ cat test.txt
maça
banana
morango
encode
は、文字列のメソッドなので、個別に適用する必要があります配列(またはリスト)の要素
私はencode
を使用する場合は戻るPY3側で、私が手:
In [26]: c1=np.array([l.encode('utf-8') for l in b])
In [27]: c1
Out[27]:
array([b'ma\xc3\xa7a', b'banana', b'morango'],
dtype='|S7')
In [28]: np.savetxt('test.txt',c1,fmt='%s')
In [29]: cat test.txt
b'ma\xc3\xa7a'
b'banana'
b'morango'
が、正しい形式で、プレーンな書き込みが動作します。
In [33]: with open('test1.txt','wb') as f:
...: for l in c1:
...: f.write(b'%s\n'%l)
...:
In [34]: cat test1.txt
maça
banana
morango
こうしたがUnicodeを混合の喜びです2つのPythonの世代があります。
それが助け場合は、ここで(wb
ファイルモードと一緒に)np.savetxt
使用していることをnp.lib.npyio.asbytes
関数のコードです:
def asbytes(s): # py3?
if isinstance(s, bytes):
return s
return str(s).encode('latin1')
は(エンコーディングが「latin1の」として固定されている注意してください)。
np.char
ライブラリがnumpyの配列の要素に文字列の様々な方法を適用し、そうnp.array([x.encode...])
のように表すことができる:過去の試験は、それがないことを示しているが、これは便利であることができる
In [50]: np.char.encode(b,'utf-8')
Out[50]:
array([b'ma\xc3\xa7a', b'banana', b'morango'],
dtype='|S7')
タイムセーバー。それでも各要素にPythonメソッドを適用する必要があります。
リストまたは長いテキストの場合、これらの文字列をどのように書きますか?あなたはまだ 'wb'モードでファイルを開きますか? – hpaulj
'wd'モードは、 'w'だけが私にエラーを投げるためです。 – umLu