7.1 基本操作
你學會了操作文件,現在讓我們來看看目錄的操作。有時這類似於文件操作,有時則不是。目錄有其特定性。處理目錄的主要功能由模塊os
和shutil
提供。
目錄的基本操作:
創建目錄
創建新目錄使用函數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()}")
GO TO FULL VERSION