Python 模塊 shutil-高級文件操作

Python 模塊 shutil-高級文件操作

模塊 shutil 提供高級別的文件操作,例如複製(copying)和打包(archiving)。

複製文件


函數 copyfile() 複製文件內容到目標文件,如果沒有權限寫入目標文件則觸發異常 IOError。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

使用 glob 查看輸出,成功複製了文件。注意,因為複製文件要打開文件讀取內容,一些特殊的文件(例如 Unix device nodes) 不可以使用 copyfile() 複製。

另一個函數 copyfileobj() 和 copyfile() 一樣實現了相同的功能,只不過參數使用的是文件流對象,可選的第三個參數可以指定讀取塊的緩衝區大小。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

這裡使用 io 模塊生成在內存的臨時文件流,使用 copyfileobj() 寫入後,首先使用 seek() 定位到輸出流文件開頭,再讀取。

函數 copy() 複製文件的第二個參數目標位置不僅可以是個文件,還可以是一個目錄。類似於 Unix 的命令行工具 cp。如果是目錄的話,會在目標目錄生成一個新文件。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

copy2() 類似 copy(),但是它還複製源文件的訪問和修改時間元數據(metadata)。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

複製文件元數據


在 Unix 中,創建文件時的權限默認使用當前用戶的 umask 值,可以使用 copymode()函數修改權限元數據。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

複製目錄


shutil 使用函數 copytree() 複製目錄,目標目錄必須不存在。它會遞歸把所有的內容都複製到目標目錄中。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

要刪除一個目錄和他的內容,使用函數 rmtree()。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

要移動一個文件或目錄到另一個地方,使用函數 move()

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

本例進行了文件重命名,可以看到,它和 Unix 的命令行工具 mv 類似。如果源文件和目標位置相同,則進行重命名,否則再移動文件和目錄。

查找文件


which() 函數從搜索路徑(PATH)中根據文件名查找,一般是查找一個可執行程序。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

也可以手動指定一個目錄,從指定的目錄中查找內容。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

關鍵字參數 mode 指定了文件需要匹配的權限,默認是可執行權限,這裡搜索的是可讀文件。

打包和解包


除了模塊 tarfile 和 zipfile 可以文件打包,shutil 還提供了高級別的函數實現打包解包的功能,可以通過函數 get_archive_formats() 查看當前系統支持的打包解包格式。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

使用函數 make_archive() 打包文件,它支持遞歸打包指定目錄下所有的內容,默認打包當前目錄的內容。可以使用參數 root_dir 和 base_dir 更改默認配置,base_dir 是要打包的目錄,root_dir 是打包目錄的跟目錄。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

類似查看打包的格式,函數 get_unpack_formats() 可以查看系統支持的解包的格式。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

使用函數 unpack_archive() 解包。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作

查看文件系統空間


查看本地系統空間使用函數 disk_usage(),返回一個元組,包括總空間大小,已使用大小和剩餘大小。

Python 模塊 shutil-高級文件操作

執行:

Python 模塊 shutil-高級文件操作


分享到:


相關文章: