我最近迁移到了Python3.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中,在tmp:contain行中的if“some pattern”上,我得到一个错误,该错误表示:
TypeError: a bytes-like object is required, not 'str'
我无法在in的任一侧使用.dedecode()解决问题,也无法使用
if tmp.find('some-pattern') != -1: continue
有什么问题,我该如何解决?
你必须从wb改为w:
def __init__(self):
self.myCsv = csv.writer(open('Item.csv', 'wb'))
self.myCsv.writerow(['title', 'link'])
to
def __init__(self):
self.myCsv = csv.writer(open('Item.csv', 'w'))
self.myCsv.writerow(['title', 'link'])
更改后,错误消失,但无法写入文件(在我的情况下)。毕竟,我没有答案?
来源:如何删除^M
更改为“rb”会给我带来另一个错误:io.UnsupportedOperation:write
当我试图将一个字符(或字符串)转换为字节时,出现了这个错误,Python 2.7的代码如下:
# -*- coding: utf-8 -*-
print(bytes('ò'))
这是Python 2.7处理Unicode字符时的方式。
这在Python 3.6中不起作用,因为字节需要额外的参数进行编码,但这可能有点棘手,因为不同的编码可能会输出不同的结果:
print(bytes('ò', 'iso_8859_1')) # prints: b'\xf2'
print(bytes('ò', 'utf-8')) # prints: b'\xc3\xb2'
在我的例子中,为了解决这个问题,我必须在编码字节时使用iso_8859_1。
你必须从wb改为w:
def __init__(self):
self.myCsv = csv.writer(open('Item.csv', 'wb'))
self.myCsv.writerow(['title', 'link'])
to
def __init__(self):
self.myCsv = csv.writer(open('Item.csv', 'w'))
self.myCsv.writerow(['title', 'link'])
更改后,错误消失,但无法写入文件(在我的情况下)。毕竟,我没有答案?
来源:如何删除^M
更改为“rb”会给我带来另一个错误:io.UnsupportedOperation:write