下面的代码在 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
Code language: PHP (php)
在Python 3.5 中运行,出现下面的错误:
TypeError: a bytes-like object is required, not 'str'
Code language: JavaScript (javascript)
解决方案1
这个问题主要是以二进制模式打开文件导致的,可以尝试用文本方式打开
with open(fname, 'rt') as f:
lines = [x.strip() for x in f.readlines()]
Code language: JavaScript (javascript)
解决方案2
可以使用.encode()
来编码的字符串
例子:
'Hello World'.encode()
Code language: JavaScript (javascript)
正如错误所述,为了将字符串写入文件,需要先将其编码为类似字节的对象
解决方案3
在添加到列表时解码:
with open(fname, 'rb') as f:
lines = [x.decode('utf8').strip() for x in f.readlines()]
Code language: JavaScript (javascript)
bytes 类型是在 Python 3 中引入的,在 Python 2 中没有字节数据类型:
>>> s=bytes('hello')
>>> type(s)
<type 'str'>
Code language: JavaScript (javascript)