Python 3 でファイル コンテンツを処理するときに「TypeError: 'str' ではなく、バイトのようなオブジェクトが必要です」というエラーが発生する 質問する

Python 3 でファイル コンテンツを処理するときに「TypeError: 'str' ではなく、バイトのようなオブジェクトが必要です」というエラーが発生する 質問する

私はごく最近 Python 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 では、次のif 'some-pattern' in tmp: continue行に次のようなエラーが表示されます。

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

.decode()のどちらの側でもこの問題を解決できずin

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

何が問題なのでしょうか、どうすれば修正できるのでしょうか?

ベストアンサー1

ファイルをバイナリモードで開きました:

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'

おすすめ記事