猿问

TypeError:在Python 3中写入文件时需要一个类似字节的对象,而不是‘str’。

TypeError:在Python 3中写入文件时需要一个类似字节的对象,而不是‘str’。

我最近迁移到Py 3.5。这段代码在Python2.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问题,但这个小小的声明困扰着我。


哔哔one
浏览 895回答 3
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'.

慕容708150

可以通过以下方式对字符串进行编码:.encode()例子:'Hello World'.encode()
随时随地看视频慕课网APP

相关分类

Python
我要回答