2017-09-15 4 views
1

私はエンコーディングとPython I/Oのドキュメントを読んできましたが、プログラミングには少し慣れていないのであまり理解していません。私は、テキストファイルを読み込み、各行を別のテキストファイルに保存しようとしています。しかし、これらの行のいくつかは日本語の文字で表示され、印刷されるとPython IDEに正しく表示されますが、ファイル内のテキストは空です。これは私がやろうとしているものです:書き込み先のファイルが空です。

filename = 'test.txt' # File with the japanese characters 
filename2 = 'test2.txt' 

text = open(filename,'rb') # I've tried opening it as 'utf-8' too 
text2 = open(filename2,'w',encoding='utf-8') # Output file 

for line in text: 
    new_line = line.decode() # From bytes to utf-8   
    print(new_line) # Just to check 
    text2.write(new_line) 

# Checking if file was written 
text3 = open(filename2,'r',encoding='utf-8') 

for line2 in text3: 
    print(line2 + 'something') 

このコードは、単に入力ファイルからの行を印刷しますが、出力ファイルに何があるか印刷する最後のビットを使用している場合、それは何も出力しません。私はLinux上でこれを試しています。出力ファイルtest2.txtは空ですが、英語の行はありません。これをWindows上で実行しようとすると、charmapが.write()を使用して文字や何かを認識できないというエラーが発生します。日本語の行をすべて削除しても、うまくいきます。私はまた、バイトの代わりにutf-8エンコーディング(すでにその方法で保存されていますが、その場合に保存されています)で入力ファイルを開いてみましたが、同じ結果です。

念のため、これは日本のラインの一つである:

▣世界から解放され▣

あなたは私を助けることを願って:)

編集:私はよPython 3.5.2を使用します。

+1

あなたは決してファイルをフラッシュしないでください。 –

+1

試してみてください:https://stackoverflow.com/questions/6048085/writing-unicode-text-to-a-text-file – minterm

+0

ファイルをチェックする方法は、Pythonコードの横に空ですか?サンプルを実行すると、utf-8がエンコードされたファイルが生成されます。 – pvg

答えて

1

エンコーディングは問題ありません。最後に印刷した結果が表示されないという問題は、すでにファイルtest2.txtを書き込み用に開いていることが原因です。ストリームtext2を明示的に閉じるまで、別のストリームのファイルから読み込むことはできません。だから、:LinuxとOSX収量に

# close write stream 
text2.close() 
# now you can open the file again to read from it 
text3 = open(filename2,'r',encoding='utf-8') 

テストそれ:

$ echo "▣世界から解放され▣" > test.txt 
$ python3.5 script.py 
▣世界から解放され▣ 

▣世界から解放され▣ 
something 
0

あなたはすべての内容が書かれていること、ファイルを閉じる必要があります。最高です。with文:

filename = 'test.txt' # File with the japanese characters 
filename2 = 'test2.txt' 

with open(filename,'r',encoding='utf-8') as text: 
    with open(filename2,'w',encoding='utf-8') as text2: 
     for line in text: 
      text2.write(line) 
関連する問題