Python學習【第十四篇】shutil模組
一、概述
我們通過python操作檔案時,除正常讀寫操作外,有時還需要進行拷貝、刪除、打包等操作,雖然os模組提供了部分功能,但還是不夠完善,這裡要講講專業的高階的檔案,資料夾,壓縮包處理模組shutil了。
二、shutil模組常見用法
- shutil.copyfileobj(fsrc, fdst,length)
將原始檔內容拷貝到目標檔案中,因此涉及到檔案的讀寫操作。查閱資料顯示可以拷貝部分檔案內容,具體用法不詳,再具體研究。
import shutil
with open('readme.md', 'r', encoding = 'utf-8') as f1, \
open('a.cc', 'w', encoding = 'utf-8') as f2:
shutil.copyfileobj(f1, f2)
- shutil.copyfile(src, dst)
拷貝檔案物件,但不包括許可權。
shutil.copyfile('./1.txt','./2.txt')
shutil.copyfile('./1.txt', '../2.txt')
- shutil.copy(src, dst)
拷貝檔案,包括檔案的許可權(但不包括所有者屬性)。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> shutil.copy('./test.py', './2.py')
>>> quit()
- shutil.copymode(src,dst)
僅僅拷貝檔案的許可權,前提是dst檔案存在,不然會報錯,測試程式碼如下。
>>> import os,shutil
>>> os.chdir("/home/admin")
>>> shutil.copymode('src_file','dst_file')
>>> quit()
可通過ls -ltr
檢視。
- shutil.copystat(src,dst)
拷貝檔案的屬性狀態資訊,如許可權,各種時間,bit,flag等,但不包括所有者和所屬組。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> os.stat('test.py')
>>> os.stat('2.py')
>>> shutil.copystat('test.py','2.py')
>>> quit()
- shutil.copy2(src,dst)
拷貝檔案和檔案的屬性狀態,目前來看等同於cp -a或cp -p。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> shutil.copy2('2.py','3.py')
>>> quit()
- shutil.copytree(src,dst)
遞迴拷貝檔案,相當於cp -r。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> shutil.copytree('01','02')
>>> quit()
- shutil.rmtree(path[, ignore_errors[, onerror]])
遞迴刪除檔案,相當於rm -rf。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> shutil.rmtree('02')
>>> quit()
- shutil.move(src,dst)
移動檔案,如果是路徑則遞迴移動,相當於mv。
>>> import os,shutil
>>> os.chdir('/root/temp')
>>> shutil.move('dns.zip','02')
>>> shutil.move('01','02')
>>> quit()
三、shutil模組常見用法
1. shutil.make_archive((base_name, format, root_dir=None,base_dir=None,verbose=0,dry=0,owner=None,group=None,logger=None)
功能:建立壓縮包並且返回檔案路徑,例如:zip,tar。
base_name : 壓縮包的檔名,也可以是壓縮包的路徑,或者路徑加檔名的混合體。如果僅僅指定檔名,則儲存在當前目錄,否則儲存到指定路徑。如果僅僅指定路徑或者指定了路徑和檔名,則自動把最後一級目錄(如果只有路徑)或者檔名作為壓縮包的檔名字首來處理。
format:壓縮包種類,’zip’,’tar’,’bztar’,’gztar’
root_dir:需要壓縮的資料夾路徑(預設當前路徑)
owner:使用者,預設當前使用者
group:組,預設當前組
logger:用於記錄日誌,通常是logging.Logger物件
>>> import shutil
>>> shutil.make_archive('p_archive', 'zip', 'archive') # archive表示當前目錄下的archive資料夾
'/home/pumpkin/Desktop/python_files/p_archive.zip'
shutil.make_archive('archive', 'zip', 'archive')
'/home/pumpkin/Desktop/python_files/archive.zip'
2. zipfile模組
功能:以zip的形式壓縮和解壓縮檔案,注意了這個只能壓縮檔案,不能壓縮目錄,如果壓縮,也只能顯示空目錄。
>>> import zipfile
# 壓縮
>>> z=zipfile.ZipFile('test.zip', 'w')
>>> z.write('test.txt')
>>> z.close()
# 解壓縮
>>> z=zipfile.ZipFile('test.zip','r')
>>> z.extractall()
>>> z.close
# 操作方法類似於檔案的操作
3. tarfile模組
功能:以tar的形式打包檔案,能打包一切形式的檔案,包括目錄。
- 打包
打包通過tar.add來實現,語法: 先以寫的方式開啟tarfile檔案物件,然後是tar.add(‘file’, arcname=’’), 第一個引數是期望打包的檔案(可以是目錄),第二個引數可選,定義打包檔案中被打包檔案的名稱,如果不寫則自動採用第一個引數的檔名,但會去掉根路徑(猜測與Linux下的tar類似,防止解壓後覆蓋根路徑下的重要檔案)。
>>> import tarfile
>>> tar = tarfile.open('test.tar','w')
>>> tar.add('test.zip')
>>> tar.add('a.cc')
>>> tar.add('b.cc')
>>> tar.close()
沒有定義打包檔案中的檔名的,檔名就是原始檔名,包含絕對路徑,但已經去掉了根路徑
- 解壓
解壓通過tar.extractall() 來實現,可自定義解壓後的路徑,預設就是當前目錄。當然前提是先以讀的方式開啟tarfile檔案物件。
>>> import tarfile
>>> tar=tarfile.open('test.tar','r')
>>> tar.extractall('tartest') # 解壓到指定目錄下
>>> tar.close()
解壓後的檔案形式與在tar包中直接開啟看到的相同。
相關文章
- Python的shutil zipfile tarfile模組學習Python
- python之shutil模組Python
- Python_shutil模組Python
- Python的shutil模組Python
- python3 shutil模組Python
- Python入門(二十六):檔案模組(os模組與shutil模組)Python
- [Python模組學習] glob模組Python
- Python學習【第十二篇】time & datetime模組Python
- python常用標準庫(os系統模組、shutil檔案操作模組)Python
- Python學習——logging模組Python
- Python學習——shelve模組Python
- Python學習——xml模組PythonXML
- Python學習——configparser模組Python
- Python學習——hashlib模組Python
- Python學習之模組Python
- Python3學習筆記(5)常用模組:time、datetime、random、os、sys、shutil、shelve、xml處理Python筆記randomXML
- Python學習【第十三篇】隨機數相關:random模組&string模組Python隨機random
- 學習Python的urllib模組Python
- Python學習之 datetime模組Python
- Python學習之常用模組Python
- Python學習之模組與包Python
- python基礎學習16—-模組Python
- 自學Python筆記-pygame模組《外星人入侵》練習篇Python筆記GAM
- Python學習之如何引用Python自定義模組?Python
- 模組學習之hashlib模組
- 模組學習之logging模組
- os ,shutil,send2trash模組彙總(tcy)
- Python學習筆記-基礎篇(14)-安裝第三方模組Python筆記
- itertools 模組學習
- python開發學習之如何更好的引用Python模組?Python
- Python開發常用的庫及模組!Python學習教程Python
- Python學習筆記_函式_匯入模組Python筆記函式
- Python3學習筆記4 , 迴圈、模組Python筆記
- nginx學習之模組Nginx
- Linux核心模組學習Linux
- retrying模組的學習
- Node fs模組學習
- python 模組:itsdangerous 模組Python