1. 程式人生 > >python 利用指令碼命令壓縮加密檔案並刪除原始檔

python 利用指令碼命令壓縮加密檔案並刪除原始檔

python自身有一個比較好的包 tarfile以及zipfile都可以壓縮檔案,但是當我們需要加密壓縮檔案的時候,這兩個包無法提供,根據官方資料 zipfile的setpassword 是無法設定密碼的

ZipFile.setpassword(pwd):
    Set pwd as default password to extract encrypted files

可以看到只能用在提取加密的檔案的時候(解壓)才能有效,詳情見這裡

另闢蹊徑
利用指令碼呼叫命令並壓縮新增檔案的方式(支援linux與window),主要方式是壓縮命令方式解壓用zipFile並設定密碼解壓

import
subprocess import zipfile as zf import platform as pf import os class ZipObj(): def __init__(self,filepathname,passwd): self.filepathname = filepathname self.passwd = passwd def enCrypt(self,deleteSource=False): """ 壓縮加密,並刪除原資料 window系統呼叫rar程式 linux等其他系統呼叫內建命令 zip -P123 tar source 預設不刪除原檔案 """
target = self.filepathname+".zip" source = self.filepathname+".txt" if pf.system()=="Windows": cmd = ['rar','a','-p%s'%(self.passwd),target,source] p = subprocess.Popen(cmd,executable=r'C:\Program Files\WinRAR\WinRAR.exe') p.wait() else
: cmd = ['zip','-P %s'%(self.passwd),target,source] p = subprocess.Popen(cmd) p.wait() # os.system(" ".join(cmd)) if deleteSource: os.remove(source) def deCrypt(self): """ 使用之前先創造ZipObj類 解壓檔案 """ zfile = zf.ZipFile(self.filepathname+".zip") zfile.extractall(r"zipdata",pwd=self.passwd.encode('utf-8')) if __name__ == "__main__": zipo = ZipObj("檔名","檔案密碼") # zipo.enCrypt(deleteSource=False) ## zipo.deCrypt()

如果您有更好的解決方案,希望不吝賜教!!