2013-10-25 24 views
39

ファイルから読み込み、その文字列を処理してUTF-8ファイルに保存する際に問題があります。ここでPythonがファイルを読み込んでutf-8に保存する

はコードです:

try: 
    filehandle = open(filename,"r") 
except: 
    print("Could not open file " + filename) 
    quit() 

text = filehandle.read() 
filehandle.close() 

私は、変数テキストにいくつかの処理を行います。

そして

try: 
    writer = open(output,"w") 
except: 
    print("Could not open file " + output) 
    quit() 

#data = text.decode("iso 8859-15")  
#writer.write(data.encode("UTF-8")) 
writer.write(text) 
writer.close() 

この出力ファイルに完全にそれは私のエディタに応じて、ISO 8859-15にそう。同じエディタは入力ファイル(変数filename内)をUTF-8として認識するので、なぜこのようなことが起こったのか分かりません。私のreasearchがコメントされた行が問題を解決する必要があることを示している限り。しかし、私がこれらの行を使用すると、結果として生じるファイルは、主に特殊文字でぎこちないものになります。私は困っているので、本当に助けていただければ幸いです。

+2

このエディターはどちらですか?どのPythonのバージョン?ここからこのコードは完全に有効と思われ、期待どおりに動作するはずです... – filmor

+0

ケイトはエディタです。 python --versionの出力はPython 2.7.5+です – aarelovich

+0

私はあなたのコードを2.6.8、2.7.5+、3.3.2+でテストしましたが、すべて正常に動作します。いくつかの入力例を提供できますか? – zero323

答えて

108

プロセスのテキスト:UTF-8でそれを書き込むには、これを試してくださいPython 3のopen構文と互換性があります。

import io 
with io.open(filename,'r',encoding='utf8') as f: 
    text = f.read() 
# process Unicode text 
with io.open(filename,'w',encoding='utf8') as f: 
    f.write(text) 
+3

私はあなたが私に言ったことを正確に行いました。他の提案と同じエラー – aarelovich

+1

私はそれを動作させています。問題は元のファイルがiso-8859-15 – aarelovich

+0

@aarelovichでした。ファイルのエンコーディングがわからない場合は、 'errors = ignore'または' errors = replace'を 'open()'に渡す必要があるかもしれません。 :) – g33kz0r

4

openを使って行うことはできません。コーデックを使用する。

オープンビルトイン関数を使用してPythonでファイルを開いているときは、ファイルを常にasciiで読み書きします。

import codecs 
with codecs.open(filename,'r',encoding='utf8') as f: 
    text = f.read() 
# process Unicode text 
with codecs.open(filename,'w',encoding='utf8') as f: 
    f.write(text) 

を編集:iocodecsモジュールを使用してプログラムのI/O境界におけるUnicodeへとから

import codecs 
file = codecs.open('data.txt','w','utf-8') 
+1

これを試してみましたが、エラーが発生しました:UnicodeDecodeError: 'utf8'コーデックは、位置0xe9のデコードできません:無効継続バイト – aarelovich

+0

utf-8エンコードで保存していますか?もしあなたがasciiである別のファイルから読み込んでいるなら、まずそれを解読する必要があります。 –

+0

コードは表示されているとおりです。私がしたことは、writer = open(出力、 'w')をwriter = codecs.open(出力、 'w'、 'utf-8')と置き換えたもので、そのエラーは – aarelovich

2

Y以下のコードでも確認できます。

file=open(completefilepath,'r',encoding='utf8',errors="ignore") 
file.read() 
関連する問題