Python 入門 29 —— 文件夾操作

文件夾,又稱目錄。關於目錄操作的函數、對象等主要集中在三個標準庫: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 目錄及其目錄中的內容被刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章