對比os模塊的函數和shutil模塊中包含的函數,會發現它們有一些重複。那麼爲什麼會存在兩個模塊提供相同功能的情況呢?這就涉及到了標準庫模塊的定位問題了。os模塊是對操作系統的接口進行封裝,主要作用是跨平臺,shutil模塊包含複製、移動、重命名、刪除文件目錄以及壓縮包的函數,主要作用是管理文件和目錄,因此它們並不衝突,並且是互補的關係,對於常見的文件操作,shutil更易於使用。在shutil裏面沒有提供相應功能的情況下再使用os模塊下的函數。
博文大綱:
- 1、複製文件
- 2、複製目錄
- 3、移動目錄或文件(重命名)
- 4、刪除目錄
- 5、更改屬主及屬組
- 6、查找命令絕對路徑
- 7、獲取磁盤使用空間
- 8、歸檔和解包
1、複製文件
shutil.copy('src','dst')
2、複製目錄
shutil.copytree('src','dst')
3、移動目錄或文件(重命名)
shutil.move('src','dst')
4、刪除目錄
shutil.rmtree('path')
5、更改屬主及屬組
shutil.chown('path','user','group')
6、查找命令絕對路徑
shutil.which('cmd')
7、獲取磁盤使用空間
total, used, free = shutil.disk_usage("path")
print("當前磁盤共: %iGB, 已使用: %iGB, 剩餘: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))
注:默認單位是字節,所以轉換爲了GB,公式如下:
1KB= 1024字節,1MB= 1024KB,1GB= 1024MB; 所以:1G=1073741824字節。也就是上面爲什麼要除以1073741824
8、歸檔和解包
1)獲取當前系統支持的解包文件格式(後綴)
shutil.get_unpack_formats()
2)獲取當前系統支持的壓縮文件格式(後綴)
shutil.get_archive_formats()
3)歸檔壓縮
shutil.make_archive('test','gztar','./') #將當前目錄下所有文件打包爲test.tar.gz
參數解釋如下(從左往右開始):
- base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑。 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
- gztar: 壓縮包種類,可選值有:“zip”, “tar”, “bztar”,“gztar”
- ./: 要壓縮的文件夾路徑(默認當前目錄)
4)解檔壓縮
shutil.unpack_archive(filename,extract_dir=None,format=None)
# 栗子:
shutil.unpack_archive('test.tar.gz','/opt/tlv')
- filename:文件路徑;
- extract_dir:解壓至的文件夾路徑。文件夾可以不存在,會自動生成;
- format:解壓格式,默認爲None,會根據擴展名自動選擇解壓格式。