私はごく最近 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'
。