我正在尝试将代码从Python版本2转换为3。
错误:“ TypeError:需要一个类似字节的对象,而不是'str”
使用的代码是:
file = sys.argv[1]
if os.path.exists(file):
with open(file,'r') as inputFile:
i = 0
output = BytesIO()
for line in inputFile.readlines():
if (re.search("^[0-9]+\.",line)):
i += 1
replacement = str(i)+'. '
newLine = re.sub('^[0-9]+\.\s*(\[?[0-9]*\]?\s*)*',replacement,line)
output.write(newLine)
else:
output.write(line)
print ("Number of steps:", i)
with open(file,'w') as inputFile:
inputFile.write(output.getvalue())
我意识到该错误与对象的类型有关,但我不知道如何解决该问题。我将不胜感激。谢谢。
BytesIO
期望字节。因此,当您执行时output.write(x)
,您必须x
是字节类型。问题在于两者line
和newLine
均为字符串类型。
您可以通过编码它们将它们转换为字节,但因为你试图写入output
到文件中,最好的解决办法实际上是改变到BytesIO
对StringIO
。后者不会抱怨line
并newLine
成为字符串,并且您可以调用inputFile.write(output.getvalue())
,只有在output为a时才有可能StringIO
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句