python中的Base64字符串格式

时间:2015-02-05 02:37:38

标签: python base64 string-formatting

我在解决如何在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文件中并不总是相同。

1 个答案:

答案 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)

(注意单引号......)