1. ホーム
  2. python

[解決済み] Pythonによるファイルからの読み込みとutf-8への保存

2023-03-30 11:54:30

質問

ファイルからの読み込み、文字列の処理、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として認識するので、なぜこのようなことが起こるのかわかりません。私の研究の範囲では、コメントされた行は問題を解決するはずです。しかし、これらの行を使用すると、テキストがスペイン語であるため、結果のファイルには、主にチルダを持つ単語などの特殊文字でちんぷんかんぷんなものがあります。私は困っているので、どんな助けでも本当に感謝します...。

どのように解決するのですか?

プログラムの I/O 境界で、Unicode との間でテキストを処理するために openencoding パラメータで指定します。 読み込むファイルのエンコーディングは、(できれば文書化されたものを)必ず使用してください。 デフォルトのエンコーディングはOSによって異なります(具体的には。 locale.getpreferredencoding(False) が使われるエンコーディングです) ので、常に明示的に encoding パラメータを使用することをお勧めします(以下、Python 3 の構文)。

with open(filename, 'r', encoding='utf8') as f:
    text = f.read()

# process Unicode text

with open(filename, 'w', encoding='utf8') as f:
    f.write(text)

まだPython 2を使用している場合、またはPython 2/3との互換性を保つために io モジュールが実装されています。 open を実装しており、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)