我想创建一个加密的zip文件,其中包括3个文件。
现在我有了这个解决方案,它允许我创建一个只有一个文件的加密压缩包。
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)
当我试图传递一个文件列表作为第三个参数时,它崩溃了。
文件列表应该采用什么格式?我也愿意尝试不同的方法。
谢谢。
发布于 2018-08-09 05:27:26
简单的答案是不使用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
为你做这件事吧。
https://stackoverflow.com/questions/51755825
复制相似问题