簡體   English   中英

從Python上的多個文件創建加密的Zip文件

[英]Create encrypted Zip file from multiple files on Python

我想創建一個包含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為您完成工作即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM