python:shutil模組

shutil(或稱為 shell 工具)模組中包含一些函式,讓你在 Python 程式中複製、

移動、改名和刪除檔案。要使用 shutil 的函式,首先需要 import shutil。

1。呼叫shutil。copy(source, destination),將路徑source 處的檔案複製到路徑destination

處的資料夾(source 和 destination 都是字串)。如果 destination 是一個檔名,它將

作為被複制檔案的新名字。該函式返回一個字串,表示被複制檔案的路徑。

>>> import shutil, os

>>> os。chdir(‘C:\\’)

>>> shutil。copy(‘C:\\spam。txt’, ‘C:\\delicious’)

‘C:\\delicious\\spam。txt’

>>> shutil。copy(‘eggs。txt’, ‘C:\\delicious\\eggs2。txt’)

‘C:\\delicious\\eggs2。txt’

2。shutil。copy()將複製一個檔案,shutil。copytree()將複製整個資料夾,以及它包含

的資料夾和檔案。呼叫 shutil。copytree(source, destination),將路徑 source 處的檔案

夾,包括它的所有檔案和子資料夾,複製到路徑 destination 處的資料夾。source 和

destination 引數都是字串。該函式返回一個字串,是新複製的資料夾的路徑。

在互動式環境中輸入以下程式碼:

>>> import shutil, os

>>> os。chdir(‘C:\\’)

>>> shutil。copytree(‘C:\\bacon’, ‘C:\\bacon_backup’)

‘C:\\bacon_backup’

shutil。copytree()呼叫建立了一個新資料夾,名為 bacon_backup,其中的內容與

原來的 bacon 資料夾一樣。現在你已經備份了非常非常寶貴的“bacon”。

3。呼叫 shutil。move(source, destination),將路徑 source 處的資料夾移動到路徑

destination,並返回新位置的絕對路徑的字串。

如果 destination 指向一個資料夾,source 檔案將移動到 destination 中,並保持

原來的檔名。例如,在互動式環境中輸入以下程式碼:

>>> import shutil

>>> shutil。move(‘C:\\bacon。txt’, ‘C:\\eggs’)

‘C:\\eggs\\bacon。txt’

假定在 C:\目錄中已存在一個名為 eggs 的資料夾,這個 shutil。move()呼叫就是

說,“將 C:\bacon。txt 移動到資料夾 C:\eggs 中。

如果在 C:\eggs 中原來已經存在一個檔案 bacon。txt,它就會被覆寫。因為用這

種方式很容易不小心覆寫檔案,所以在使用 move()時應該注意。

destination 路徑也可以指定一個檔名。在下面的例子中,source 檔案被移動

並改名。

>>> shutil。move(‘C:\\bacon。txt’, ‘C:\\eggs\\new_bacon。txt’)

‘C:\\eggs\\new_bacon。txt’

這一行是說,“將 C:\bacon。txt 移動到資料夾 C:\eggs,完成之後,將 bacon。txt

檔案改名為 new_bacon。txt。”

前面兩個例子都假設在 C:\目錄下有一個資料夾 eggs。但是如果沒有 eggs 檔案

夾,move()就會將 bacon。txt 改名,變成名為 eggs 的檔案。

>>> shutil。move(‘C:\\bacon。txt’, ‘C:\\eggs’)

‘C:\\eggs’

這裡,move()在 C:\目錄下找不到名為 eggs 的資料夾,所以假定 destination 指

的是一個檔案,而非資料夾。所以 bacon。txt 文字檔案被改名為 eggs(沒有。txt 檔案

副檔名的文字檔案),但這可能不是你所希望的!這可能是程式中很難發現的缺陷,

因為 move()呼叫會很開心地做一些事情,但和你所期望的完全不同。這也是在使用

move()時要小心的另一個理由。

最後,構成目的地的資料夾必須已經存在,否則 Python 會丟擲異常。

4。利用 os 模組中的函式,可以刪除一個檔案或一個空資料夾。但利用 shutil 模組,

可以刪除一個資料夾及其所有的內容。

• 用 os。unlink(path)將刪除 path 處的檔案。

• 呼叫 os。rmdir(path)將刪除 path 處的資料夾。該資料夾必須為空,其中沒有任

何檔案和資料夾。

• 呼叫 shutil。rmtree(path)將刪除 path 處的資料夾,它包含的所有檔案和資料夾都

會被刪除。