首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Python上的多个文件创建加密Zip文件

从Python上的多个文件创建加密Zip文件
EN

Stack Overflow用户
提问于 2018-08-09 05:23:02
回答 1查看 189关注 0票数 0

我想创建一个加密的zip文件,其中包括3个文件。

现在我有了这个解决方案,它允许我创建一个只有一个文件的加密压缩包。

代码语言:javascript
复制
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)

当我试图传递一个文件列表作为第三个参数时,它崩溃了。

文件列表应该采用什么格式?我也愿意尝试不同的方法。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-09 05:27:26

简单的答案是不使用shell=True,而是创建一个参数列表。然后,您可以将文件名列表粘贴到该参数列表中。而且,即使文件名中有引号,你也不必担心以某种方式引用空格或其他时髦的字符,等等。

代码语言:javascript
复制
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,那么您不能仅仅将文件列表转换为字符串,您必须将每个字符串添加到末尾。有点像这样:

代码语言:javascript
复制
fileargs = ' '.join('"{}".format(file) for file in files)
archive_command = r'"{}" a "{}" {}'.format(loc_7z, 'file.zip', fileargs)

这已经相当可怕了--让它在Windows的适当引用规则下工作更可怕。就让subprocess为你做这件事吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51755825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档