我在解决如何在python 2.7中将base64数据正确输入字符串格式时遇到了问题。以下是相关的代码段:
fileExec = open(fileLocation, 'w+')
fileExec.write(base64.b64decode('%s')) %(encodedFile) # encodedFile is base64 data of a file grabbed earlier in the script.
fileExec.close()
os.startfile(fileLocation)
看起来很傻,我需要在这种情况下使用字符串格式,因为这个脚本实际上正在做什么,但是当我启动脚本时,我收到以下内容错误:
TypeError: Incorrect Padding
我不太确定我需要对'%s'做些什么才能让它发挥作用。有什么建议?我使用错误的字符串格式吗?
更新:这里有一个更好的想法,我最终要完成的任务:
encodedFile = randomString() # generates a random string for the variable name to be written
fileExec = randomString()
... snip ...
writtenScript += "\t%s.write(base64.b64decode(%s))\n" %(fileExec, encodedFile) # where writtenScript is the contents of the .py file that we are dynamically generating
我必须使用字符串格式,因为变量名在我们制作的python文件中并不总是相同。
答案 0 :(得分:1)
该错误通常意味着您的base64字符串可能无法正确编码。但这里只是代码中逻辑错误的副作用。 你所做的基本上是这样的:
a = base64.b64decode('%s')
b = fileExec.write(a)
c = b % (encodedFile)
所以你试图解码文字字符串"%s",它失败了。
看起来应该更像这样:
fileExec.write(base64.b64decode(encodedFile))
[编辑:使用冗余字符串格式...请不要在实际代码中执行此操作]
fileExec.write(base64.b64decode("%s" % encodedFile))
您更新的问题显示b64decode部分位于字符串内,而不在您的代码中。这是一个显着的差异。字符串中的代码也缺少围绕第二种格式的一组内部引号:
writtenScript += "\t%s.write(base64.b64decode('%s'))\n" % (fileExec, encodedFile)
(注意单引号......)