![](/img/trans.png)
[英]How to create a password protected zipfile using the zipfile module
[英]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.