1. ホーム
  2. python

[解決済み] Python 3 の open(encoding="utf-8") を Python 2 にバックポートする。

2022-03-03 11:59:54

質問

Python 3用にビルドされたPythonコードベースがあり、エンコーディングパラメータ付きのPython 3スタイルのopen()を使用しています。

https://github.com/miohtama/vvv/blob/master/vvv/textlineplugin.py#L47

    with open(fname, "rt", encoding="utf-8") as f:

さて、このコードをPython 2.xにバックポートして、Python 2とPython 3で動作するコードベースを手に入れたいと思います。

を回避するための推奨戦略は何ですか? open() の違いやエンコーディングパラメータの不足を解決できますか?

Python 3 の open() スタイルのファイルハンドラで、バイト列をストリームするため、Python 2の open() ?

解決方法は?

1. Python 2でエンコーディングパラメータを取得する。

Python 2.6と2.7にのみ対応する必要がある場合は、以下のようになります。 io.open の代わりに open . io は Python 3 の新しい io サブシステムで、 Python 2,6 と 2.7 にも存在します。Python 2.6 (および 3.0) では、純粋に Python で実装されており、非常に遅いので、ファイルの読み込みに速度が必要な場合は、良いオプションではないことに注意してください。

スピードが必要で、かつPython2.6以前をサポートする必要がある場合は codecs.open 代わりに これはエンコーディングパラメータも持っており、以下のように非常によく似ています。 io.open ただし、行末の扱いが異なる。

2. Python 3を取得するために open() 形式のファイルハンドラで、バイト列をストリーミングします。

open(filename, 'rb')

バイナリ」を意味する「b」に注目。