目錄和文件的操作,需要引入 os 模塊:
import os
一、創建目錄
目錄 directory ,簡寫 dir ,簡單來說就是文件夾。
-
使用 os.mkdir( ) 函數創建目錄(創建一級目錄)。
-
使用 os.makedirs()函數創建多級目錄(目錄下面還有目錄)。
原型如下所示:
os.mkdir( path ) # mk 就是 make
os.makedirs( path ) # 居然不是 mkdirs,我覺得這個名字太不科學了,增加了記憶數量。
參數path 爲要創建目錄(文件夾)的路徑。
os.mkdir('d:\hello') # D盤下創建hello的目錄
os.mkdir("hello") # 跟python文件同級的目錄
os.makedirs('d:\\books\\book') # 字符串中的 \ 具有轉義的功能,所以表示普通的 \ ,需要 \\
os.makedirs( r"d:\books\book" ) # 字符串前面加個 r,就不會轉義了。
os.makedirs( r"books\book" ) # 跟 python 文件同級的文件夾
但是,如果文件夾已經存在,再創建相同目錄,就會報錯。
所以,一般在創建目錄之前,要做一個判斷,看路徑是否存在(多級目錄判斷方式一樣)。
isExist = os.path.exists( r"ss\abc" ) # 文件夾存在與否
if not isExist: # 如果不存在文件夾
os.makedirs(r"ss\abc") # 創建目錄
os.path.exists( x ) 可以判斷文件或者文件夾是否存在。是,True;不是,False。
二、刪除目錄
刪除 remove,簡寫 rm。
-
os.rmdir( ) 刪除目錄。
-
os.removedirs( ) 函數刪除多級目錄
和創建目錄函數對比,發現多級目錄 make 和 remove 寫的是完整單詞。
原型如下:
os.rmdir( path ) # 刪除單級目錄
os.removedirs( path ) # 刪除多級目錄
參數path 爲要刪除的目錄(文件夾)路徑。
os.rmdir('d:\ss') # 刪除 d 盤下的 ss 目錄
os.rmdir('ss') # 刪除 python 文件同級的 ss 目錄
os.removedirs('d:\\ss\\abd') # 刪除多級目錄
os.removedirs( r"ss\abd")
注意:要刪除的目錄必須是空目錄!所以,在刪除目錄之前,一定要清空目錄裏的內容。有一個文件或者文件夾都不行。
三、刪除文件
使用 os.remove( ) 函數刪除一個文件。不能是多個文件。
os.remove( r"ss\abc\test.txt") # 刪除 ss\abc 目錄下的 test.txt 文件
四、遍歷目錄
使用 os.walk( ) 函數遍歷目錄。
其原型如下:
os.walk( path )
其參數path 爲要遍歷的目錄。
返回一個對象,它的每個部分都是一個三元組 ( '目錄x',[目錄x下的目錄list],目錄x下面的文件 ) 。
mulu = os.walk( "ss" ) # 遍歷跟 python 文件同級的 ss 文件夾。其結構如下圖。
for item in mulu:
print( item )
('ss', ['abc'], [])
('ss\\abc', ['11', '22', '33'], ['abc1.txt', 'abc2.txt', 'abc3.txt'])
('ss\\abc\\11', [], ['py1.txt', 'py2.txt', 'py3.txt'])
('ss\\abc\\22', [], [])
('ss\\abc\\33', [], [])
輸出的目錄結構,從上到下,一層一層的輸出,直到底層。
五、判斷是否爲目錄
os.path.isdir( path ) 函數判斷某一路徑是否爲目錄。是,True;不是,False。
六、判斷是否爲目錄
os.path.isfile( path ) 函數判斷某一路徑是否爲文件。是,True;不是,False。
小案例1:刪除目錄下所有的文件
刪除目錄下所有的文件,含子目錄的文件
mulu = os.walk( "ss" )
for item in mulu:
for file in item[2]:
print( item[0]+"\\"+file )
os.remove( item[0]+"\\"+file )
小案例2:刪除某個目錄
刪除某個目錄,該目錄不爲空,有子文件夾和文件。如圖所示:
def delFolder(targetDir):
fList = os.walk(targetDir)
dirs = [] # 文件夾目錄 lsit
for item in fList :
print(item)
for file in item[2]: # 遍歷元素2 文件list
os.remove(item[0]+"\\"+file) # 刪除文件
dirs.append(item[0]) # 從上到下依次把文件夾目錄放進list中
dirs = dirs[::-1] # 逆向文件夾路徑,從下到上
for itemDir in dirs: # 從下到上,依次刪除目錄
os.rmdir(itemDir)
delFolder("test")