文件夾,又稱目錄。關於目錄操作的函數、對象等主要集中在三個標準庫:os、os.path、shutil。
一、os 模塊 ———— 基本操作
1、創建新目錄
(1)os.mkdir(r’路徑/目錄名’)
創建指定的目錄,無返回值,創建不成功則拋出異常。爲了避免斜槓與反斜槓引起的麻煩,'路徑/目錄名’應該用原始字符串形式,即在前面加上r 或 R。例如:
import os
os.mkdir(r'C:/Users/Administrator/Desktop/測試目錄') # 創建目錄:測試目錄
os.mkdir(r'C:/Users/Administrator/Desktop/測試目錄') # FileExistsError: 已存在
(2)os.makedirs(r’路徑/目錄名’)
與 os.mkdir() 類似,也是創建目錄,無返回值,但如果路徑中的目錄如果還不存在,則一併創建。例如:
import os
os.mkdir(r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc/dd') # FileNotFoundError:找不到指定的路徑
os.makedirs(r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc/dd') # 創建目錄:aa、bb、cc、dd
2、重命名和移動目錄
os.rename(r’路徑/舊目錄名’,r’路徑/新目錄名’)
這個函數兼有重命名和移動的功能,無返回值,重命名或移動不成功則拋出異常。當前後路徑一致時,進行“重命名”;當前後路徑不一致時,進行“移動”。例如:
import os
os.replace(r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc/dd',r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc/newdd') # dd 目錄重命名爲:newdd
os.replace(r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc',r'C:/Users/Administrator/Desktop/測試目錄/aa/newcc') # cc 目錄被移動,且重命名爲:newcc
3、刪除目錄
os.rmdir(r’路徑/目錄名’)
刪除指定的目錄,無返回值,刪除不成功則拋出異常。只能刪除空目錄,其中有子目錄或文件的目錄不能被刪除。例如:
import os
os.rmdir(r'C:/Users/Administrator/Desktop/測試目錄/aa/newcc/newdd') # newdd 目錄被刪除
os.rmdir(r'C:/Users/Administrator/Desktop/測試目錄/aa') # OSError:[WinError 145] 目錄不是空的
4、取目錄中的所有內容
os.listdir(r’路徑/目錄名’)
返回一個列表,該列表包含了目錄中的所有文件與目錄的名稱。例如:
import os
print(os.listdir(r'C:/Users/Administrator/Desktop/測試目錄/aa'))
# ['aa-文件一.txt', 'aa-文件三.txt', 'aa-文件二.txt', 'aa-文件四.txt', 'bb', 'newcc']
5、取目錄及其子目錄中的所有內容
os.walk(r’路徑/目錄名’)
取目錄、子目錄、子子目錄…中的所有內容,返回一個生成器對象。返回的生成器對象的元素爲元組。
一個目錄或子目錄構成一個元組:(路徑/目錄,[子目錄列表],[文件列表])。例如:
import os.path
t = os.walk(r'C:/Users/Administrator/Desktop/測試目錄')
print(t) # <generator object walk at 0x0000000002572900>
print([x for x in t])
# [('C:/Users/Administrator/Desktop/測試目錄',
# ['aa'],
# []),
# ('C:/Users/Administrator/Desktop/測試目錄\\aa',
# ['bb', 'newcc'],
# ['aa-文件一.txt', 'aa-文件三.txt', 'aa-文件二.txt', 'aa-文件四.txt']),
# ('C:/Users/Administrator/Desktop/測試目錄\\aa\\bb',
# [],
# ['bb-文件一.txt', 'bb-文件三.txt', 'bb-文件二.txt', 'bb-文件四.txt']),
# ('C:/Users/Administrator/Desktop/測試目錄\\aa\\newcc',
# ['dd'],
# ['cc-文件一.txt', 'cc-文件三.txt', 'cc-文件二.txt', 'cc-文件四.txt']),
# ('C:/Users/Administrator/Desktop/測試目錄\\aa\\newcc\\dd',
# [],
# ['dd-文件一.txt', 'dd-文件二.txt'])]
二、os.path 模塊 ———— 路徑操作
1、分隔路徑和目錄
os.path.split(r’路徑/目錄名’),返回組成的元組:(路徑,目錄名)。
os.path.dirname((r’路徑/目錄名’),返回路徑。
os.path.basename((r’路徑/目錄名’),返回目錄名。
例如:
import os.path
print(os.path.split(r'C:/Users/Administrator/Desktop/測試目錄')) # ('C:/Users/Administrator/Desktop', '測試目錄')
print(os.path.dirname(r'C:/Users/Administrator/Desktop/測試目錄')) # C:/Users/Administrator/Desktop
print(os.path.basename(r'C:/Users/Administrator/Desktop/測試目錄')) # 測試目錄
2、判斷是否目錄
os.path.isdir(r’路徑’),是目錄則返回True,不是目錄或目錄不存在返回False。例如:
import os.path
print(os.path.isdir(r'C:/Users/Administrator/Desktop/測試目錄')) # True
print(os.path.isdir(r'C:/Users/Administrator/Desktop/測試目錄aaa')) # False
3、連接多個路徑
os.path.join(r’路徑1’, r’路徑2’, r’路徑3’…),返回連接後的路徑。例如:
import os.path
print(os.path.join(r'C:/Users',r'Administrator',r'Desktop/測試目錄')) # C:/Users\Administrator\Desktop/測試目錄
三、shutil 模塊(shell utility 的縮寫,外殼實用程序) ———— 高級操作
1、遞歸複製目錄
copytree(r’路徑/舊目錄名’,r’路徑/新目錄名’)
複製目錄,返回“路徑/新目錄名”。例如:
import shutil
print(shutil.copytree(r'C:/Users/Administrator/Desktop/測試目錄/aa/bb/cc',r'C:/Users/Administrator/Desktop/測試目錄/aa/cc'))
# aa 中新增複製來的目錄 cc :C:/Users/Administrator/Desktop/測試目錄/aa/cc
2、遞歸刪除目錄
rmtree(r’路徑/目錄名’)
刪除指定的目錄,無返回值。
import shutil
shutil.rmtree(r'C:/Users/Administrator/Desktop/測試目錄/aa/cc') # cc 目錄及其目錄中的內容被刪除