簡體   English   中英

如何在Python中使用Zipfile模塊添加密碼和輸出目錄?

[英]How to add a password and output directory using Zipfile module in Python?

我從網上獲得了下面的代碼,嘗試添加密碼,並且想要將結果目錄更改為“ C:#SFTPDWN”(最終的Zip文件應位於此文件夾中)。

我嘗試將其更改為如下所示,但沒有用。

with ZipFile('CC-Data.zip', 'w', 'pass word') as zip:

有人可以告訴我如何更改此代碼以添加密碼和更改結果文件夾嗎?

最后一件事,當前它將壓縮#SFTPDWN文件夾,我只想將其中的所有內容壓縮(現在它將創建兩個文件夾(CC-Data.zip並在其中#SFTPDWN))。 有人可以告訴我如何將所有內容壓縮在#SFTPDWN文件夾中嗎?

from zipfile import ZipFile
import os


def get_all_file_paths(directory):
    file_paths = []

    for root, directories, files in os.walk(directory):
        for filename in files:
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)

    return file_paths


def main():
    # path to folder which needs to be zipped
    directory = 'C:\#SFTPDWN'

    file_paths = get_all_file_paths(directory)

    print('Following files will be zipped:')
    for file_name in file_paths:
        print(file_name)

    with ZipFile('CC-Data.zip', 'w') as zip:
        # writing each file one by one
        for file in file_paths:
            zip.write(file)

    print('Zipped successfully!')


if __name__ == "__main__":
    main()

對於密碼問題:來自文檔:

此模塊支持ZIP存檔中加密文件的解密, 但是當前無法創建加密文件 解密非常慢,因為它是在本機Python中而不是C中實現的。

您可能需要使用3rd party庫來創建加密的zip或以其他方式加密存檔。

對於第二部分,在ZipFile.write ,文檔還提到:

ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)

將名為filename的文件寫入存檔, 並為其指定存檔名稱arcname (默認情況下,該名稱filename相同,但不帶驅動器號,並且刪除前導路徑分隔符)。 [...]

注意:存檔名稱應相對於存檔根目錄,即,它們不應以路徑分隔符開頭。

因此,您將需要剝離file變量的任何前綴,並將其作為arcname參數傳遞。 使用os.path.relpath可能會有所幫助,例如(我在Linux上,但應該在Windows下使用Windows路徑):

>>> os.path.relpath("/folder/subpath/myfile.txt", "/folder/")
'subpath/myfile.txt'

邊欄:諸如"C:\\Something"類的路徑是非法字符串,因為它具有轉義符\\S Python可以忍受這一點(我認為在3.8中會出錯)並按字面意義重寫它們。 使用"C:\\\\Something"r"C:\\Something""C:/Something"如果嘗試執行類似"C:\\Users"則實際上會引發錯誤,或者是"C:\\nothing"它可能會默默地做一些奇怪的事情...

暫無
暫無

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

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