文件打包在.py文件中并且在其他代码当中调用功能的实现
在我们使用python进行代码编写时,如果我们希望在代码中使用某个文件,通常我们需要找到指定路径,并找到该路径下的文件。而在我们实现一些功能例如编写GUI应用时,在我们使用pyinstaller进行文件打包时,文件并不会被写入代码当中,所以我们往往需要在应用当中内置这些图片。这时就有了一个问题,如何在python当中实现这个功能呢?
Base64编码
Base64
是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.
关于Base64编码内容较多,大家可以自行去查找相关文献进行阅读。
在这里我们只需要知道它时一种编码方法就可以,我们可以考虑将我们使用的目标文件用该编码方法进行Base64编码,再进行解码为二进制编码写入.py文件当中。
在使用时我们只需要将该文件当作第三方库在代码当中调用即可。
代码(可直接套用)
下面代码示例是将我自己桌面上的a.jpg图片文件转换为了a_jpg.py文件。
import base64
def propy(project_name):
open_pro = open("%s" % project_name, 'rb')
b64str = base64.b64encode(open_pro.read())
open_pro.close()
# 注意这边b64str一定要加上.decode()
write_data = 'project = "%s"' % b64str.decode()
f = open('%s.py' % project_name.replace('.', '_'), 'w+')
f.write(write_data)
f.close()
if __name__ == '__main__':
pics = ['C:/Users/lenovo/Desktop/a.jpg']
for i in pics:
propy(i)
print("OK")#完成便会输出OK
在使用时是同样需要导入base64库,就会在相同路径下生成相应的文件。
import base64
from a_jpg import project as p
tmp = open('1.jpg','wb')#文件名自己设定,后面参数为二进制写入格式,不可更改。
tmp.write(base64.b64decode(p))
tmp.close()
文件的删除
如果使用完该文件,我们可以使用os.remove()的功能将生成的文件进行删除。
import os
os.remove('1.jpg')
总结
在上述处理过后,我们通过编码与解码实现了文件在代码中的导入与删除,这样在我们使用pyinstaller进行文件打包时就可以将文件直接解码读取并且使用结束后删除,实现了我们所需的功能。