目錄操作

Python SELF TW
等級 21 , 課堂 6
開放

7.1 基本操作

你學會了操作文件,現在讓我們來看看目錄的操作。有時這類似於文件操作,有時則不是。目錄有其特定性。處理目錄的主要功能由模塊osshutil提供。

目錄的基本操作:

創建目錄

創建新目錄使用函數os.mkdir()

例子:


import os

# 創建新目錄
os.mkdir('new_directory')
print("目錄 'new_directory' 已創建")

創建多層嵌套目錄

創建多層嵌套目錄使用函數os.makedirs()

例子:


import os

# 創建多層嵌套目錄
os.makedirs('parent_directory/child_directory')
print("嵌套目錄 'parent_directory/child_directory' 已創建")

刪除目錄

刪除空目錄使用函數os.rmdir()。刪除包含內容的目錄使用函數shutil.rmtree()

例子:


import os

# 刪除空目錄
os.rmdir('new_directory')
print("目錄 'new_directory' 已刪除")

刪除包含內容的目錄的例子:


import shutil

# 刪除包含內容的目錄
shutil.rmtree('parent_directory')
print("目錄 'parent_directory' 和所有它的內容已刪除")

重要! 千萬不要刪除整個目錄及其所有內容。在 10 次中你可能會有 1 次錯誤導致程式移除到你磁碟上的一半檔案。大家都會經歷這個。千萬別這樣做。

建議在刪除目錄前用函數os.path.exists()檢查是否存在。這能避免刪除不存在的目錄或錯誤路徑的問題。

例子:


import os
import shutil

# 刪除前檢查目錄是否存在
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"目錄 '{directory_path}' 和所有它的內容已刪除")
else:
    print(f"目錄 '{directory_path}' 不存在,刪除不可能")

7.2 複製目錄

移動和重命名目錄

移動或重命名目錄使用函數os.rename()


import os

# 創建示範目錄
os.mkdir('original_directory')

# 重命名目錄
os.rename('original_directory', 'renamed_directory')
print("目錄 'original_directory' 已重命名為 'renamed_directory'") 

複製目錄

複製目錄使用函數shutil.copytree()。這個函數不僅會複製目錄內容,還會在指定路徑創建新目錄。


import os
import shutil

# 創建示範目錄
os.mkdir('source_directory')

# 複製目錄
shutil.copytree('source_directory', 'destination_directory')
print("目錄 'source_directory' 已複製到 'destination_directory'")

7.3 當前目錄

每個運行中的程式都有一個「當前工作目錄」的概念。通常是運行程式的目錄,也是程式搜尋其服務文件的地方。例如,所有未指定目錄名稱的文件路徑都會在當前目錄中尋找。

獲取當前工作目錄

獲取當前工作目錄使用函數os.getcwd()


import os

# 獲取當前工作目錄
current_directory = os.getcwd()
print(f"當前工作目錄: {current_directory}")

更改當前工作目錄

更改當前工作目錄使用函數os.chdir()


import os

# 更改當前工作目錄
os.chdir('new_directory')
print(f"當前工作目錄更改為: {os.getcwd()}")

更改當前工作目錄可能影響相對於當前目錄指向的文件路徑。在更改目錄時請小心,因為這可能導致程式在原始目錄尋找文件時出錯。

檢查目錄是否存在

檢查目錄是否存在使用函數os.path.exists()


import os

# 檢查目錄是否存在
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"目錄 '{directory_path}' 存在")
else:
    print(f"目錄 '{directory_path}' 不存在")

獲取目錄的絕對路徑

獲取絕對路徑使用函數os.path.abspath()


import os

# 獲取目錄的絕對路徑
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"絕對路徑: {absolute_path}")

7.4 目錄內容

獲取文件和目錄列表

獲取指定目錄中的文件和目錄列表使用函數os.listdir()


import os

# 獲取當前目錄中的文件和目錄列表
contents = os.listdir('.')
print(f"當前目錄內容: {contents}")

文件和目錄的操作不僅僅是作為路徑列表,還可以作為更複雜的對象進行操作。

使用os.scandir()獲取目錄內容的信息

函數os.scandir()返回一個迭代器,會為目錄中的每個記錄提供DirEntry對象。這些對象包含文件和目錄的信息,使它比os.listdir()更有效率,特別是對於大目錄。


import os

# 獲取目錄內容的信息
with os.scandir('.') as entries:
    for entry in entries:
        print(f"名稱: {entry.name}, 是否目錄: {entry.is_dir()}, 是否文件: {entry.is_file()}")
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION