1. ホーム
  2. python

[解決済み] TypeError: Python3でファイルへの書き込み時に'str'ではなくbytesのようなオブジェクトが要求される

2022-03-19 10:28:01

質問

最近、Py 3.5に移行しました。 このコードは Python 2.7 で正しく動作していました。

with open(fname, 'rb') as f:
    lines = [x.strip() for x in f.readlines()]

for line in lines:
    tmp = line.strip().lower()
    if 'some-pattern' in tmp: continue
    # ... code

3.5にアップグレードしたら

TypeError: a bytes-like object is required, not 'str'

最後の行(パターン検索コード)でエラーが発生しました。

を使ってみましたが .decode() 関数を文の両脇に置くことも、試してみました。

if tmp.find('some-pattern') != -1: continue

- を無駄にする。

2:3の問題はほぼ全てすぐに解決できたのですが、このちょっとした文言が気になるのです。

解決方法は?

バイナリーモードでファイルを開いた。

with open(fname, 'rb') as f:

これは、ファイルから読み込んだすべてのデータを bytes オブジェクトではなく str . この場合、封じ込めテストに文字列を使用することはできません。

if 'some-pattern' in tmp: continue

を使うことになる。 bytes オブジェクトに対してテストするために tmp の代わりに

if b'some-pattern' in tmp: continue

を置き換えることで、代わりにテキストファイルとしてファイルを開くこともできます。 'rb' モードを 'r' .