2017-04-03 12 views
2

私はスペースなしPythonの - UnicodeのファイルIO

とUnicode文字の束と1行のtxtファイルを持っていると私はtxtファイル出力したいです各行に1文字ずつ

私がこれをしようとすると、最終的にはユニコードのキャラクターが分割されてしまいますが、どうすればこの問題を解決できますか?

+0

これまでに試したコードを含めることはできますか? –

答えて

-1

これは、Unicode文字の束を持つテキストファイルのようなものはありませんPythonの3.5で

line = "" 
with open("file.txt", "w", encoding="utf8") as f: 
    f.write("\n".join(line)) 
3

を動作しますが、それだけでファイルが読み込まれた後、「Unicodeオブジェクト」について話すことは理にかなっていますPythonオブジェクトにデコードされます。テキストファイルのデータは、一方向または他の方法で符号化されます。

問題は、文字を正しくUnicodeオブジェクトにデコードするためにファイルを正しく読み取ることです。

import io 
enc_source = enc_target = 'utf-8' 
with io.open('my_file.txt', encoding=enc_source) as f: 
    the_line = f.read().strip() 
with io.open('output.txt', mode='w', encoding=enc_target) as f: 
    f.writelines([c + '\n' for c in the_line]) 

上記の説明では、ターゲットファイルとソースファイルのエンコードが両方ともutf-8であると仮定しています。これは必ずしも当てはまるわけではなく、ソースファイルがどのようにエンコードされているかを知る必要があります。あなたはenc_targetを選択することになりますが、誰かがあなたにenc_sourceを伝えなければなりません(ファイル自体はあなたに伝えられません)。

+0

ちょうど好奇心から、 'codecs.open()'に対するあなたのアプローチに利点/違いはありますか?あるいは 'コーデック'はPython 2のことですか? – patrick

+1

私はちょうど 'io.open'がクロスコンパイルのためのより良い方法であり、'コーデック 'は遺産であると付け加えます。いくつかの技術的な違いがあります、興味があればgoogleすることができます。 – wim