日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

在 Python 中使用 7zip 備份文件的操作

瀏覽:173日期:2022-07-02 14:08:56

我在按照 Byte of python一步步的學習Python, 在學到‘解決方案’的時候,原文的實例 “backup_ver1.py” 是用zip備份文件。

這里面我有幾點不一樣的地方:

我的電腦沒有zip,我用的是7zip;

原文直接用‘zip’命令備份,我直接使用7z命令報錯。

使用7z命令備份之前,需要把7zip的安裝目錄添加到系統環境變量Path中;這時候我可以在CMD中執行7z,但是在python中還是報錯,“7z is not recognized as an internal ……”

下面三種方法可以在python中正確運行7z命令:

# 方法1: 拷貝 7z.exe 和7z.dll 到當前python文件所在的目錄下。 否則,不認識7z 命令。

zip_command = ’7z a -tzip {0} {1} -r’.format(target, ’ ’.join(source))

# 方法2: os.system() 里面執行的是同目錄下的exe, 使用如下os.chdir() 命令切換 path。

os.chdir(’D:Program Files (x86)7-Zip’)print(’切換當前路徑為:’, os.getcwd())zip_command = ’7z a -tzip {0} {1} -r’.format(target, ’ ’.join(source))

# 方法3:在cmd 命令中寫入7z.exe所在的目錄

zip_command = ’'D:Program Files (x86)7-Zip7z.exe' a -tzip {0} {1} ’.format(target, ’ ’.join(source))

import osimport time # 1. 需要備份的文件與目錄將被指定在一個列表中。# 例如在 Windows 下:source = [’'C:My Documents'’, ’C:Code’]# 又例如在 Mac OS X 與 Linux 下:source = [’/Users/swa/notes’]source = [’D:testfold’]# 在這里要注意到我們必須在字符串中使用雙引號用以括起其中包含空格的名稱。 # 2. 備份文件必須存儲在一個主備份目錄中# 例如在 Windows 下:target_dir = ’E:Backup’# 又例如在 Mac OS X 和 Linux 下:target_dir = ’/Users/swa/backup’target_dir = ’D:testBackup’# 要記得將這里的目錄地址修改至你將使用的路徑 # 3. 備份文件將打包壓縮成 zip 文件。# 4. zip 壓縮文件的文件名由當前日期與時間構成。# os.sep 變量的使用方式——它將根據你的操作系統給出相應的分隔符,在# GNU/Linux 與 Unix 中它會是 ’/’ ,在 Windows 中它會是 ’’ ,在 Mac OS 中它會是 ’:’target = target_dir + os.sep + time.strftime(’%Y%m%d%H%M%S’) + ’.zip’ # 如果目標目錄還不存在,則進行創建if not os.path.exists(target_dir): os.mkdir(target_dir) # 5. 我們使用 zip 命令將文件打包成 zip 格式# 方法1: 拷貝 7z.exe 和7z.dll 到當前python文件所在的目錄下。 否則,不認識7z 命令。# zip_command = ’7z a -tzip {0} {1} -r’.format(target, ’ ’.join(source)) # 方法2: os.system() 里面執行的是同目錄下的exe, 使用如下os.chdir() 命令切換 path。# os.chdir(’D:Program Files (x86)7-Zip’)# print(’切換當前路徑為:’, os.getcwd())# zip_command = ’7z a -tzip {0} {1} -r’.format(target, ’ ’.join(source)) # 方法3:在cmd 命令中寫入7z.exe所在的目錄# -mcu 強制使用utf-8 編碼文件名zip_command = ’'D:Program Files (x86)7-Zip7z.exe' a -tzip -mcu {0} {1} ’.format(target, ’ ’.join(source))# 運行備份print(’nZip command is:’)print(zip_command)print(’Running:’) if os.system(zip_command) == 0: print(’Successful backup to’, target)else: print(’Backup FAILED’) # 查看壓縮文件內容check_command = ’'D:Program Files (x86)7-Zip7z.exe' l {0}’.format(target) print(’nCheck zipfile command is:’)print(check_command)print(’Running:’) # 使用 os.system(check_command) 中文返回有亂碼,所以使用 os.popen# if os.system(check_command) == 0:# print(’Please check the file list in:’, target)# else:# print(’Check info FAILED’)print(’Please check the file list in:’, target)p = os.popen(check_command)print(p.read())p.close() # 解壓縮到目錄extr_command = ’'D:Program Files (x86)7-Zip7z.exe' x {0} -oD:testextract -y’.format(target) print(’nExtract command is:’)print(extr_command)print(’Running:’) if os.system(extr_command) == 0: print(’Successful extract to’, ’D:testextract’)else: print(’Extract FAILED’)

注意:

在壓縮的時候,不要使用 -r,遞歸會把folder同級的其它目錄下的文件一起壓縮;

在解壓的時候,使用-y,如果當前目錄下已存在被解壓的目錄和文件,替換目標文件。

zip_command = ’'D:Program Files (x86)7-Zip7z.exe' a -tzip {0} {1} -r’.format(target, ’ ’.join(source))

extr_command = ’'D:Program Files (x86)7-Zip7z.exe' x {0} -oD:testextract -y’.format(target)

補充知識:誰說Python的shutil不支持7z解壓縮,我來教你擴展它的功能!

python的內置模塊

在Python的標準庫中,有哪些你常用并且覺得犀利無比的模塊?不要說time、datetime、os、sys。這些模塊常用是常用,但是逼格不夠高啊。舉個例子,如果你經常在LeetCode上刷題,你會發現有時Java、C需要幾十行的算法題,如果Python使用了collections、itertools,可能三四行代碼就結束了。

shutil的便利

日常的編碼中,常會涉及到對文件、目錄等的操作場景,如果我們使用os,可能需要對文件、文件夾,非空等進行逐個判斷。舉個例子: 我們現在要刪除一個目錄,目錄中包含有文件與文件夾,如果使用os模塊,沒有現成可以使用的函數,需要我們進行判斷與分類執行。

import os# path是文件的路徑,如果這個路徑是一個文件夾,# 則會拋出OSError的錯誤,這時需用用rmdir()來刪除os.remove(path)# path是文件夾路徑,注意文件夾需空的才能被刪除os.rmdir(path)

多數初學者遇到刪除文件夾,想到的操作就是,創建兩個列表,然后用os.walk遍歷目錄,將文件與文件夾分別存入初始化的兩個列表中,然后先統一刪除文件,最后刪除文件夾。如果有上面這樣操作的同學,請面壁三分鐘。明顯沒有好好學習os.walk函數。

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]) top -- 是你所要遍歷的目錄的地址, 返回的是一個三元組(root,dirs,files)。

root 所指的是當前正在遍歷的這個文件夾的本身的地址

dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄)

files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)

topdown --可選,為 True,則優先遍歷 top 目錄,否則優先遍歷 top 的子目錄(默認為開啟)。如果 topdown 參數為 True,walk 會遍歷top文件夾,與top 文件夾中每一個子目錄。

onerror -- 可選,需要一個 callable 對象,當 walk 需要異常時,會調用。

followlinks -- 可選,如果為 True,則會遍歷目錄下的快捷方式(linux 下是軟連接 symbolic link )實際所指的目錄(默認關閉),如果為 False,則優先遍歷 top 的子目錄。

只需要將topdown設置為False,這樣在遍歷目錄時,就會從根節點進行遍歷,然后我們逐個刪除就ok了,哪里需要那么麻煩!代碼如下:

import os for root, dirs, files in os.walk(’D:software_temp’, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))

說這么多,無外乎為了引出最簡便的方式 : shutil模塊

如果換做shutil模塊登場,那么執行刪除目錄的操作,只需要0.1秒的時間:

import shutil

shutil.rmtree(’D:software_temp’)

就這樣,完事兒了...

文件解壓縮

日常工作中,我們經常會使用python進行文件的解壓縮處理。python自帶的解壓縮模塊有zipfile, gzip, tarfile,如果我們需要解壓rar文件則需要單獨下載rarfile模塊,針對每一種壓縮文件,我們都需要針對文件類型進行對應模塊的使用,是不是很繁瑣?如果我們使用shutil呢?讓我們先來看看shutil支持的解壓類型:

import pprintimport shutilpprint.pprint(shutil.get_unpack_formats()) output:[(’bztar’, [’.tar.bz2’, ’.tbz2’], 'bzip2’ed tar-file'), (’gztar’, [’.tar.gz’, ’.tgz’], 'gzip’ed tar-file'), (’tar’, [’.tar’], ’uncompressed tar file’), (’xztar’, [’.tar.xz’, ’.txz’], 'xz’ed tar-file'), (’zip’, [’.zip’], ’ZIP file’)]

shutil已經包含了我們上面提到的所有文件。

.7z文件是什么鬼?

眾所周知,zip的壓縮率相比rar是比較低的,但是商業軟件下載中,你很少會見到.rar的文件,why?因為專利啊...

RAR是一種專利文件格式,用于數據壓縮與歸檔打包,開發者為尤金·羅謝爾(俄語:Евгений Лазаревич Рошал,拉丁轉寫:Yevgeny Lazarevich Roshal),RAR的全名是“Roshal ARchive”,即“羅謝爾的歸檔”之意。首個公開版本RAR 1.3發布于1993年。

所以,有很多產品在軟件發布時,開始使用一種壓縮率更高的.7z文件,這又是為什么?來讓我們訪問一下7-zip的官網:7-zip官方主頁:https://sparanoid.com/lab/7z/在其中有一個許可協議是這樣寫的

許可協議:

7-Zip 是一款 開源 軟件。大多數源代碼都基于 GNU LGPL 許可協議下發布。AES 代碼基于 BSD 許可下發布。unRAR 代碼基于兩種許可:GNU LGPL 和 unRAR 限制許可。更多下許可信息請查看:7-Zip 許可。您可以在任何一臺計算機上使用 7-Zip ,包括用在商業用途的計算機,不對 7-Zip 進行捐贈或支付并不影響您的使用。

shutil擴展7z

說了這么多7z文件的好處,可我們看到shutil并不能解壓該類型的文件啊。我們能否讓shutil支持.7z文件,達到無腦解壓縮呢?此時,你需要py7zr模塊。養成好習慣,遇到模塊先找GitHub:https://github.com/miurahr/py7zr

1. 模塊下載

pip install py7zr

2. 基本使用

當我們安裝好py7zr后,它可以在cmd下直接運行該命令

List archive contents$ py7zr l test.7zExtract archive$ py7zr x test.7zExtract archive with password$ py7zr x -P test.7z password?: ****Create and compress to archive$ py7zr c target.7z test_dirCreate multi-volume archive$ py7zr c -v 500k target.7z test_dirTest archive$ py7zr t test.7zShow information$ py7zr iShow version$ py7zr --version

單獨使用模塊

import py7zr archive = py7zr.SevenZipFile(’sample.7z’, mode=’r’)archive.extractall(path='/tmp')archive.close() with py7zr.SevenZipFile(’target.7z’, ’w’) as z: z.writeall(’./base_dir’)

3. shutil集成

之所以推薦py7zr給大家,不僅因為他的簡單好用,更是由于他可以輕松集成于shutil,來看看它的使用方式吧:

from py7zr import pack_7zarchvie, unpack_7zarchiveimport shutil # register file format at first.shutil.register_archive_format(’7zip’, pack_7zarchive, description=’7zip archive’) shutil.register_unpack_format(’7zip’, [’.7z’], unpack_7zarchive, description=’7zip archive’) # extractionshutil.unpack_archive(’test.7z’, ’/tmp’) # compressionshutil.make_archive(’target’, ’7zip’, ’src’) pprint.pprint(shutil.get_unpack_formats()) # output:[(’7zip’, [’.7z’], ’7zip archive’), (’bztar’, [’.tar.bz2’, ’.tbz2’], 'bzip2’ed tar-file'), (’gztar’, [’.tar.gz’, ’.tgz’], 'gzip’ed tar-file'), (’tar’, [’.tar’], ’uncompressed tar file’), (’xztar’, [’.tar.xz’, ’.txz’], 'xz’ed tar-file'), (’zip’, [’.zip’], ’ZIP file’)]

通過注冊我們看到,shutil已經支持7z文件的解壓了,就是如此簡單。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方歡迎留言討論,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
高清在线一区| 日韩在线麻豆| 在线观看精品| 亚洲综合专区| 欧美日韩国产高清电影| 欧美极品一区二区三区| 最新国产精品视频| 欧美在线看片| 蜜桃一区二区三区| 美女视频网站久久| 亚洲精品三级| 日韩精品91亚洲二区在线观看| 亚洲精品一区二区妖精| 成人啊v在线| 亚洲日韩中文字幕一区| 日韩av黄色在线| 国产精品成人一区二区网站软件| 亚洲三级精品| 国产精品va视频| 精品中文字幕一区二区三区四区| 久久国产视频网| 欧美激情福利| 91精品国产乱码久久久久久久| 免费国产自久久久久三四区久久| 久久蜜桃av| 一本一本久久| 久久av导航| 美日韩精品视频| 国产欧美日韩一区二区三区在线| 久久久久久美女精品| 欧美日韩在线二区| 日产欧产美韩系列久久99| 日韩一区二区三免费高清在线观看 | 午夜久久av| 香蕉成人av| 亚洲精品黄色| 亚洲国产福利| 日韩一区二区三区免费| 亚洲精品影视| 不卡中文一二三区| 97久久精品| 国产偷自视频区视频一区二区| 免费日韩av片| 日韩综合精品| 水蜜桃久久夜色精品一区| 99日韩精品| 久久亚洲人体| 色8久久久久| 午夜久久99| 动漫av一区| 亚洲开心激情| 午夜精品婷婷| 精品91久久久久| 高清不卡亚洲| 国产剧情一区| 亚洲欧美日韩国产综合精品二区| 麻豆高清免费国产一区| 日本一区二区三区视频在线看| 国产一区二区精品福利地址| 欧美在线观看天堂一区二区三区| 国产在视频一区二区三区吞精| 在线国产一区二区| 国精品产品一区| 久久中文字幕一区二区三区| 91精品视频一区二区| 国产婷婷精品| 天堂成人国产精品一区| 欧美91福利在线观看| 91综合网人人| 国产福利片在线观看| 亚洲性色av| 成人羞羞视频在线看网址| 成人在线黄色| 国产一区一一区高清不卡| 久久久久久色 | 日本成人一区二区| 午夜久久黄色| 热久久久久久久| 日本不卡高清| 久久av资源| 樱桃视频成人在线观看| 久久影院资源站| 欧美gv在线| 国产午夜精品一区二区三区欧美 | 国产欧美高清| 久久精品青草| 亚洲欧美日韩国产综合精品二区| 午夜在线视频一区二区区别| 亚洲精品一二三区区别| 激情婷婷久久| 综合激情一区| 成人在线免费观看91| 欧洲亚洲一区二区三区| 国产精品毛片| 欧美日韩精品一区二区三区视频 | 国产一区国产二区国产三区| 91精品一区二区三区综合在线爱| 在线天堂中文资源最新版| 福利一区二区| 亚洲乱码一区| 激情综合自拍| 日韩精品中文字幕吗一区二区 | 一区免费视频| 国产乱子精品一区二区在线观看| 日本不卡在线视频| 日本美女一区| 国产精品久久久免费| 婷婷亚洲综合| 麻豆久久久久久| 国产精品theporn| 香蕉成人久久| 欧美日韩在线播放视频| 精品理论电影在线| 亚洲精品黄色| av中文资源在线资源免费观看| 亚洲毛片在线| 国产亚洲毛片在线| 国产成人精品一区二区三区在线| 中文字幕一区二区精品区| 久久av免费| 国产调教一区二区三区| 美女久久一区| 国产精品免费看| 激情综合亚洲| 日韩一区电影| 少妇精品久久久一区二区 | 91免费精品国偷自产在线在线| 激情婷婷综合| 尤物网精品视频| 欧美精品激情| 99pao成人国产永久免费视频| 婷婷成人在线| 日韩国产欧美| 日韩中文字幕高清在线观看| 成人国产精选| 国产精品任我爽爆在线播放| 国产精品中文字幕制服诱惑| 综合一区二区三区| 久久久一本精品| 欧美日中文字幕| 亚洲欧美日韩精品一区二区| 日韩精品久久久久久久电影99爱| 日韩精品dvd| 在线视频观看日韩| 欧美日韩国产综合网| 亚洲丝袜啪啪| 国产乱人伦丫前精品视频 | 激情综合网址| 日韩精品久久久久久久软件91| 欧美日韩国产在线观看网站 | 婷婷综合社区| 丝袜美腿亚洲一区二区图片| 日韩精选在线| 精品一区二区三区在线观看视频| 国产va在线视频| 在线看片日韩| 成人在线视频区| 国产亚洲一区在线| 日韩av不卡一区二区| 国产日韩亚洲欧美精品| 成人污污视频| 伊人久久国产| 日韩和欧美的一区| 精品久久网站| 亚洲精品一区二区在线看| 91成人在线网站| 在线一区视频观看| 国产精品日本一区二区三区在线 | 高清一区二区三区| 久久中文视频| 奇米亚洲欧美| 在线看片福利| 国产精品亚洲欧美| 91精品二区| 精品国产亚洲一区二区三区大结局| 91精品二区| 精品日韩一区| 日韩二区三区在线观看| 国内精品福利| 国产激情在线播放| 欧美日韩99| 天堂成人免费av电影一区 | 欧美精品国产一区| 桃色一区二区| 国产精品成人3p一区二区三区| 日韩精品欧美激情一区二区| 国产欧美精品| 精品亚洲美女网站| 日韩综合一区| 美女在线视频一区| 国产精品宾馆| 精品午夜视频| 久久久国产精品网站| 日本国产欧美| 在线一区二区三区视频| 男人天堂欧美日韩| 婷婷亚洲综合| 亚洲免费在线| 蜜臀av在线播放一区二区三区| 欧美一级精品|