對比os模塊的函數和shutil模塊中包含的函數,會發現它們有一些重複。那麼爲何會存在兩個模塊提供相同功能的狀況呢?這就涉及到了標準庫模塊的定位問題了。os模塊是對操做系統的接口進行封裝,主要做用是跨平臺,shutil模塊包含複製、移動、重命名、刪除文件目錄以及壓縮包的函數,主要做用是管理文件和目錄,所以它們並不衝突,而且是互補的關係,對於常見的文件操做,shutil更易於使用。在shutil裏面沒有提供相應功能的狀況下再使用os模塊下的函數。ide
博文大綱:函數
- 一、複製文件
- 二、複製目錄
- 三、移動目錄或文件(重命名)
- 四、刪除目錄
- 五、更改屬主及屬組
- 六、查找命令絕對路徑
- 七、獲取磁盤使用空間
- 八、歸檔和解包
shutil.copy('src','dst')
shutil.copytree('src','dst')
shutil.move('src','dst')
shutil.rmtree('path')
shutil.chown('path','user','group')
shutil.which('cmd')
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操作系統
shutil.get_unpack_formats()
shutil.get_archive_formats()
shutil.make_archive('test','gztar','./') #將當前目錄下全部文件打包爲test.tar.gz
參數解釋以下(從左往右開始):code
- base_name: 壓縮包的文件名,也能夠是壓縮包的路徑。只是文件名時,則保存至當前目錄,不然保存至指定路徑。 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
- gztar: 壓縮包種類,可選值有:「zip」, 「tar」, 「bztar」,「gztar」
- ./: 要壓縮的文件夾路徑(默認當前目錄)
shutil.unpack_archive(filename,extract_dir=None,format=None) # 栗子: shutil.unpack_archive('test.tar.gz','/opt/tlv')
- filename:文件路徑;
- extract_dir:解壓至的文件夾路徑。文件夾能夠不存在,會自動生成;
- format:解壓格式,默認爲None,會根據擴展名自動選擇解壓格式。