模塊 shutil 提供高級別的文件操作,例如複製(copying)和打包(archiving)。
複製文件
函數 copyfile() 複製文件內容到目標文件,如果沒有權限寫入目標文件則觸發異常 IOError。
執行:
使用 glob 查看輸出,成功複製了文件。注意,因為複製文件要打開文件讀取內容,一些特殊的文件(例如 Unix device nodes) 不可以使用 copyfile() 複製。
另一個函數 copyfileobj() 和 copyfile() 一樣實現了相同的功能,只不過參數使用的是文件流對象,可選的第三個參數可以指定讀取塊的緩衝區大小。
執行:
這裡使用 io 模塊生成在內存的臨時文件流,使用 copyfileobj() 寫入後,首先使用 seek() 定位到輸出流文件開頭,再讀取。
函數 copy() 複製文件的第二個參數目標位置不僅可以是個文件,還可以是一個目錄。類似於 Unix 的命令行工具 cp。如果是目錄的話,會在目標目錄生成一個新文件。
執行:
copy2() 類似 copy(),但是它還複製源文件的訪問和修改時間元數據(metadata)。
執行:
複製文件元數據
在 Unix 中,創建文件時的權限默認使用當前用戶的 umask 值,可以使用 copymode()函數修改權限元數據。
執行:
複製目錄
shutil 使用函數 copytree() 複製目錄,目標目錄必須不存在。它會遞歸把所有的內容都複製到目標目錄中。
執行:
要刪除一個目錄和他的內容,使用函數 rmtree()。
執行:
要移動一個文件或目錄到另一個地方,使用函數 move()
執行:
本例進行了文件重命名,可以看到,它和 Unix 的命令行工具 mv 類似。如果源文件和目標位置相同,則進行重命名,否則再移動文件和目錄。
查找文件
which() 函數從搜索路徑(PATH)中根據文件名查找,一般是查找一個可執行程序。
執行:
也可以手動指定一個目錄,從指定的目錄中查找內容。
執行:
關鍵字參數 mode 指定了文件需要匹配的權限,默認是可執行權限,這裡搜索的是可讀文件。
打包和解包
除了模塊 tarfile 和 zipfile 可以文件打包,shutil 還提供了高級別的函數實現打包解包的功能,可以通過函數 get_archive_formats() 查看當前系統支持的打包解包格式。
執行:
使用函數 make_archive() 打包文件,它支持遞歸打包指定目錄下所有的內容,默認打包當前目錄的內容。可以使用參數 root_dir 和 base_dir 更改默認配置,base_dir 是要打包的目錄,root_dir 是打包目錄的跟目錄。
執行:
類似查看打包的格式,函數 get_unpack_formats() 可以查看系統支持的解包的格式。
執行:
使用函數 unpack_archive() 解包。
執行:
查看文件系統空間
查看本地系統空間使用函數 disk_usage(),返回一個元組,包括總空間大小,已使用大小和剩餘大小。
執行:
閱讀更多 趣喜歡編程 的文章