博主在前兩篇博文分別介紹了加密rar檔案的解壓和加密zip檔案的解壓後面又開始嘗試了兩類檔案的加密壓縮,在查閱相關資料後,發現rarfile庫和zipfile庫都不支援加密壓縮,只能實現普通壓縮,因此另謀他路,發現可以呼叫cmd命令進行壓縮,下面將分別介紹rar和zip檔案的加密壓縮。呼叫壓縮成rar的cmd命令為:
c:\"命令引數解釋:第乙個引數為winrar軟體的安裝路徑,第二個引數a表示新增壓縮,第三個引數用於設定壓縮密碼,-p加上密碼「123」,第四個引數為壓縮檔案的輸出路徑及其壓縮的檔名,第五個引數為需要壓縮的檔案路徑,如果是單個檔案需要具體到檔名,如果是資料夾下所有檔案,只需到當前資料夾路徑。program files
"\winrar\winrar.exe a -p123 c:\test.rar c:\test.txt
呼叫壓縮成zip的cmd命令同rar,只是輸出路徑不同,需將字尾改為.zip:
c:\"在弄清cmd命令後,利用python實現就很容易了,有兩種實現方式:program files
"\winrar\winrar.exe a -p123 c:\test.zip c:\test.txt
(1)os.system
(2)subprocess.popen
博主採用了os模組的system實現,下面分別介紹rar和zip的加密壓縮實現:
(1)rar加密壓縮:
1如果上面的**呼叫的winrar為比較新的版本,加密方式即為aes-256加密,如果你想要實現傳統加密,有兩種方法實現:(1)安裝前面介紹的winrar5.4版本;(2)可以在命令列中新增乙個引數:-mezlimport
os2 password = "
123"
3 dirpath = "
c:\test.txt"#
待壓縮的檔案路徑及檔案
4 outfullname = "
c:\test.rar"#
壓縮檔案的輸出路徑及檔名
5 cmd = r'
c:\"program files"\winrar\winrar.exe a -p%s %s %s
' % (password, outfullname, dirpath)#
password為壓縮密碼
6 os.system(cmd)
**實現也即將第5行修改為:
cmd = r'(2)zip加密壓縮:c:\"program files"\winrar\winrar.exe a -p%s -mezl %s %s
' % (password, outfullname, dirpath)
**同rar加密壓縮,只需修改第4行中的壓縮檔案的輸出名為.zip即可
import博主在實現過程中測試密碼的時候發現,cmd命令中也存在特殊字元的轉義問題,例如博主在測試的密碼中帶有雙引號時,轉義遇到了很大的麻煩,因為python和cmd中都需要對雙引號進行轉義,在查詢很大資料,嘗試了"" /符號進行轉義都無果,最後進行大量嘗試,發現了cmd中兩種方式能對雙引號進行轉義,(博主的密碼為「123):ospassword = "
123"
dirpath = "
c:\test.txt"#
待壓縮的檔案路徑及檔案
outfullname = "
c:\test.zip"#
壓縮檔案的輸出路徑及檔名
cmd = r'
c:\"program files"\winrar\winrar.exe a -p%s %s %s
' % (password, outfullname, dirpath)#
password為壓縮密碼
os.system(cmd)
(1)雙引號用兩個雙引號引起來,最後再加乙個雙引號,此時壓縮密碼是「123
(2)雙引號前面再加乙個雙引號,此時壓縮密碼仍然是「123
因此博主在**上考慮了引號:
import當然cmd中還有/等符號的轉義,還有空格符號的一些處理,有興趣的朋友都可以去了解一下。osdef
rar():
cmd = r'
c:\"program files"\winrar\winrar.exe a -p%s -mezl %s %s
' %(password, outfullname, dirpath)
(cmd)
if__name__ == "
__main__":
dirpath = "
c:\\test
"outfullname = "
c:\\test.rar
"pwd = input("密碼"
) i = '"'
if i in
pwd:
password = pwd.replace('
"','""'
)
(password)
else
: password =pwd
rar()
java 壓縮成gz檔案
public class gziputil catch filenotfoundexception e gzipoutputstream out null try catch ioexception e byte buf new byte 1024 int len 0 try in.close lo...
python list壓縮成1維
對於規範的且巢狀維度較低的多維列表,python中有很多方法可以實現 a 1,2 3,4 5,6 print j for i in li for j in i orfrom itertools import chain print list chain a orimport itertools a ...
jar 解壓縮後重新壓縮成jar包。
cmd 在jar 解壓縮的目錄下 輸入 jar cvf0m name.jar 就能重新打包成jar。一.jar命令引數 jar命令格式 jar v m e 0 m i c 目錄 檔名.其中這四個引數必須選選其一。v f m e 0 m i 是可選引數,檔名也是必須的。c 建立乙個jar包 t 顯示j...