web-dev-qa-db-ja.com

Pythonファイルから読み取り、utf-8に保存

ファイルからの読み取り、文字列の処理、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として認識するため、これが発生した理由はわかりません。私の研究が示している限り、コメント行は問題を解決するはずです。ただし、これらの行を使用すると、結果のファイルは主に特殊文字、テキストがチルダ付きの単語がスペイン語で意味がわからなくなります。私は困惑しているので、どんな助けでも本当に感謝しています...

63
aarelovich

codecsモジュールを使用して、プログラムのI/O境界でUnicodeとの間でテキストを処理します。

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)

編集:コーデックの代わりにioモジュールが推奨され、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)
159
Mark Tolonen

また、以下のコードでそれを通過することができます:

file=open(completefilepath,'r',encoding='utf8',errors="ignore")
file.read()
7
Siva Kumar

Openを使用してそれを行うことはできません。コーデックを使用します。

open組み込み関数を使用してpythonでファイルを開くとき、常にASCIIでファイルを読み書きします。 utf-8で作成するには、これを試してください。

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