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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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上的多个文件创建加密的Zip文件的主要内容,如果未能解决你的问题,请参考以下文章

Zip然后将多个文件加密到单个存档中

CTF misc python加密zip和rar文件的枚举解密工具(python代码)

Python zipfile 模块创建多个同名文件

使用 Lambda 节点从 S3 上的文件在 S3 上创建一个 zip 文件

如何使用 python 从位于同一目录中的多个 zip 文件夹中读取 csv 文件?

如何从bash脚本加密zip文件