2017-08-24 48 views
0

我想从python2迁移到python3。 在代码中,它像这样以二进制模式打开一个文件。使用TypeError从Python2迁移到Python 3.6.2

f = open('test', 'rb+') 

因为它需要这样的文件查找。

f.seek(-26, 1) 

而且,代码将格式化的字符串写入文件。

f.writelines("%20s,%04d\n" % (varStr, varInt)) 
f.writelines('{0:>20s},{1:04d}\n'.format(varStr, varInt)) 

上面的代码是原始代码,下面的代码是我编辑的。 但是,当我运行代码时,出现错误。

TypeError: a bytes like object is required, not 'int'

请帮助我从这个地狱。

+0

创建[MCVE。包括指示故障线路的完整回溯。 –

回答

0

有两种错误:

  1. 你需要编码的串以二进制方式打开文件时(改变它们以字节为单位)
  2. writelines必须以列表,而不是单个项目中使用(该函数最后有's')。你的情况,你可以用 '写'

也许这样的事情会工作:

f.write(("%20s,%04d\n" % (varStr, varInt)).encode()) 
f.write(('{0:>20s},{1:04d}\n'.format(varStr, varInt)).encode()) 
+0

非常感谢。我解决了这个问题。 f.writelines(['{0:> 20s},{1:04d} \ n'.format(varStr,varInt).encode()]) – HoYa