python - 从 Python 上的多个文件创建加密的 Zip 文件
问题描述
我想创建一个包含 3 个文件的加密 zip 文件。
现在我有这个解决方案,它允许我创建一个只有一个文件的加密 zip。
loc_7z = r"C:\Program Files\7-Zip\7z.exe"
archive_command = r'"{}" a "{}" "{}"'.format(loc_7z, 'file.zip', 'file_name.xls')
subprocess.call(archive_command, shell=True)
当我尝试将文件列表作为第三个参数传递时,它会崩溃。
文件列表应该有什么格式?我也愿意尝试不同的方法。
谢谢你。
解决方案
简单的答案是不使用shell=True
,而是创建一个参数列表。然后,您可以将文件名列表粘贴到该参数列表中。即使文件名中包含引号等,您也不必担心以一种有效的方式引用空格或其他时髦字符。
def makezip(*files):
loc_7z = r"C:\Program Files\7-Zip\7z.exe"
archive_command = [loc_7z, 'file.zip', *files]
subprocess.call(archive_command)
makezip('file_name.xls')
makezip('file name.xls')
makezip('file1.xls', 'file2.xls', 'file3.xls')
makezip(*big_old_list_of_files)
如果shell=True
出于某种原因您确实必须使用,那么您不能只是将文件列表变成一个字符串,您必须将每个字符串添加到末尾。有点像这样:
fileargs = ' '.join('"{}".format(file) for file in files)
archive_command = r'"{}" a "{}" {}'.format(loc_7z, 'file.zip', fileargs)
这已经很可怕了——让它与 Windows 的正确引用规则一起工作更可怕。让我们subprocess
为您完成工作。
推荐阅读
- python - python图像序列文件模式正则表达式
- javascript - 试图测试输入更改方法,但它似乎不起作用
- android - 布局背景弄乱了边距
- sql - 使用变量作为 column%TYPE (ORACLE)
- android - Android Studio 错误无法解析“setJavaScriptEnabled”
- mysql - MySQL Workbench 编辑器突出显示文本颜色
- java - 从 Java 项目生成 CSV 时更改文件名
- python - Keras初学者:最后一层的输出形状应该是什么?
- python - 类变量,instance.var 和 instance.__class__.var 的区别
- c# - unity,沿轴旋转对象并沿同一方向返回起点