我最近已经迁移到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()语句两侧的函数,也尝试过:
.decode()
if tmp.find('some-pattern') != -1: continue
-无济于事。
我能够很快解决几乎所有的2:3问题,但是这个小小的声明困扰着我。
2:3
你以二进制模式打开文件:
with open(fname, 'rb') as f:
这意味着从文件读取的所有数据都作为bytes对象而不是作为对象返回str。然后,你不能在容纳测试中使用字符串:
str
if 'some-pattern' in tmp: continue
你必须使用一个bytes对象进行测试tmp:
bytes
if b'some-pattern' in tmp: continue
或以文本文件形式打开文件,而不是将'rb'模式替换为'r'。
'rb'
'r'