shutil:高层文件操作
生活随笔
收集整理的這篇文章主要介紹了
shutil:高层文件操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
shutil模塊包括一些高層文件操作,如賦值和歸檔
復制文件
import shutil
'''
copyfile將源文件的內容復制到目標文件,如果沒有權限寫目標文件,則會產生一個IOError
'''
# copyfile(源文件,目的文件)
shutil.copyfile(r"C:python37Libasyncioase_futures.py", "copy_base_futures.py")
'''
這個函數底層是使用copyfileobj,copyfileobj接收的是文件句柄。
因此copyfile這個函數會打開輸入文件進行讀取,所以某些特殊文件(如Unix的設備節點)不可以通過copyfile復制為新的特殊文件。
'''
# copy(源文件, 目的文件或者目錄)
'''
對于copyfile來說,必須是文件。如果目的文件我們指定了一個目錄(比如temp),得到的依舊是一個名為temp的文件
但是對于copy來說,如果目的文件我們指定了一個目錄,那么會將文件拷貝到這個目錄里面去,新的文件名和源文件名一致。但如果目錄不存在那么和copyfile是一樣的。
'''
shutil.copy(r"C:python37Libasyncioase_futures.py", r"666")
# 如果存在名為666的目錄,那么會在666目錄中創建一個名為base_futures.py的文件。如果不存在,那么會在當前目錄創建一個名為666的文件
# 如果是copyfile的話,那么無論666這個目錄存在與否,都是在當前目錄創建一個名為666的文件
# copy2:和copy類似,只不過copy只是拷貝文件內容,copy2除了拷貝文件內容還會拷貝文件的訪問和修改時間。
# 得到的文件和源文件的所有特性都相同
復制文件元數據
默認地,在Unix下創建一個新文件時,它會根據當前用戶的unmask接收權限。
要把權限從一個文件復制到另外一個文件,可以使用copymode
要為文件復制其他元數據,可以使用copystat
處理目錄樹
import shutil
'''
shutil包含3個函數來處理目錄樹。
要把一個目錄從一個位置復制到另外一個位置,可以使用copytree,這個函數會遞歸遍歷目錄樹,將文件復制到目標位置。目標目錄不能存在,存在的話會報錯
'''
# 別看我目的目錄指定的文件的格式,但是還是會創建一個目錄,只不過這個目錄就叫做aa.py
# 因此執行完之后會在我的當前目錄中創建一個名為aa.py的目錄,然后會把C:python37Libasyncio里面的內容全部拷貝到aa.py里面來
shutil.copytree(r"C:python37Libasyncio", r"aa.py")
# 如果要把一個文件或者目錄移動到另外一個位置,可以使用move
# 類似于Unix下的mv命令,如果源和目標都在同一個文件夾中,那么屬于重命名。如果不在,那么會先將源文件復制到目標文件,然后再刪除源文件
# 這里不再演示
注意:無論拷貝還是move,都是指令的目錄里面的內容,目錄本身是不會拷貝或者移動的。?
查找文件
import shutil
'''
which函數會掃描一個路徑以查找一個命名文件。
典型的用法是在環境變量PATH定義的shell搜索路徑中查找一個可執行程序。
'''
print(shutil.which("go")) # C:Goingo.EXE
print(shutil.which("python")) # C:Python37python.EXE
print(shutil.which("aaa")) # None
# 除此之外還可以指定路徑,如果不指定路徑,那么默認是os.environ("PATH")
# 但是查找文件可以使用之前說到的pathlib
import pathlib
p = pathlib.Path(r"C:python37Libsite-packagespandas")
for name in p.rglob("frame.py"):
print(name)
r'''
C:python37Libsite-packagespandascoreframe.py
C:python37Libsite-packagespandascoresparseframe.py
'''
歸檔
import shutil
'''
Python的標準庫包含很多模塊來管理歸檔文件,如tarfile和zipfile。
另外shutil中也提供了很多更高層的函數來創建和解壓歸檔文件。
get_archive_formats函數可以查看當前系統上支持的所有格式的名字和描述
'''
for name, format in shutil.get_archive_formats():
print(name, ":", format)
'''
bztar : bzip2'ed tar-file
gztar : gzip'ed tar-file
tar : uncompressed tar file
xztar : xz'ed tar-file
zip : ZIP file
'''
# 支持的格式取決于有哪些模塊和底層庫。因此根據這個例子在哪里運行,它的輸出可能會有所變化。
# 可以使用make_archive函數來創建一個新的歸檔文件,說白了就是壓縮包。
# shutil.make_archive(壓縮之后的文件名, 壓縮的格式, 要壓縮的文件或目錄)
# 會自動將壓縮之后的文件名和壓縮的格式組合起來
shutil.make_archive(r"asyncio", "zip", r"C:python37Libasyncio")
# 表示將C:python37Libasyncio下面的所有文件打包成zip格式放到當前目錄下,壓縮后的文件叫做asyncio.zip
# 當然壓縮之后的文件名還可以是一個路徑,如果是"D:satoriasyncio"的話,那么得到的就是D:satoriasyncio.zip,總之就是將其和壓縮的格式組合起來
# 除此之外,還可以對一個壓縮包進行解包
# shutil.unpack_archive(壓縮包的名字, 解壓到的位置, 壓縮格式)
# 另外壓縮格式如果不傳,那么會自動根據壓縮包的擴展名來判斷到底該采用哪種格式來解壓縮
文件系統空間
import shutil
'''
完成一個長時間運行、可能耗盡可用空間的操作之前,最好先檢查本地文件系統,來看看有多少可用的空間,這會很有用。
disk_usage函數會返回一個元組,包括總空間、當前正在使用的空間、以及未用的空間(自由空間)
'''
total_bytes, used_bytes, free_bytes = shutil.disk_usage("C:")
print(total_bytes / 1024 / 1024 / 1024) # 222.78890991210938
print(used_bytes / 1024 / 1024 / 1024) # 51.60057830810547
print(free_bytes / 1024 / 1024 / 1024) # 171.1883316040039
# 除此之外可以使用psutil這個模塊
import psutil
# 可以看到,幫我們把所用比例都算出來了,目前用了百分之23.2
print(psutil.disk_usage("C:")) # sdiskusage(total=239217770496, used=55405699072, free=183812071424, percent=23.2)
總結
以上是生活随笔為你收集整理的shutil:高层文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 赶快卸载电脑管家吧如何卸载电脑管家
- 下一篇: 新买的无线路由器怎么安装新买路由器如何无