Python 遍歷資料夾中的指定型別檔案
首先羅列一下os.path模組的相關函式:
1.判斷型函式:
exists() 指定路徑(檔案或者目錄)是否存在
isabs() 指定路徑是否為絕對路徑
isdir() 指定路徑是否存在且為一個目錄
isfile() 指定路徑是否存在且為一個檔案
islink() 指定路徑是否存在且為一個符號連結
ismount() 指定路徑是否存在且為一個掛載點
samefile() 兩個路徑名是否指向同一個檔案
2.檔案資訊型函式:
getatime() 返回最近訪問時間 (浮點型秒數)
getctime() 返回檔案建立時間
getmtime() 返回最近檔案修改時間
getsize() 返回檔案大小 (位元組為單位)
abspath() 返回絕對路徑
normpath() 規範path字串形式
最後兩個函式的例子:
a = “dapei-imgs_21667c16-fff5-45ca-829b-cf509f9886bb.jpg”
os.path.abspath(a)
‘D:\Python27\user\dapei-imgs\_21667c16-fff5-45ca-829b-cf509f9886bb.jpg’
os.path.normpath(a)
‘dapei-imgs\_21667c16-fff5-45ca-829b-cf509f9886bb.jpg’
另外把a寫成a = “dapei-imgs/_21667c16-fff5-45ca-829b-cf509f9886bb.jpg”
結果沒變化
3.路徑字串操作函式:
一個完整的路徑字串分成 abspath = driver+path+filename(name+extname)
因為有一定的格式在其中,所以對路徑字串的操作原則上都是根據這些格式進行的。
基本的分割函式有3個,都是把字串分割成兩部分
split() 把路徑分成兩部分,依據符合“\”,第二部分是最後一個“\”符號的右邊部分
splitdrive() 把路徑中的驅動器名稱分割到第一部分,沒有則為空,依據“:”符號
splitext() 把路徑中的副檔名分割到第二部分,沒有則為空,依據“.”符號
以split()為基礎,派生出的兩個函式分別對應split()返回值的第一項和第二項
dirname()
basename()
最後是一個與split()對仗的操作
join() 把多個字串拼接成路徑,插入“\”符號
下面用一個遍歷資料夾下的檔案來說明上述函式的應用,在實際專案中,當然可以用os.walk()或者os.path.walk()來完成這個工作(程式設計的核心是設計的創意,而不是所處的巨集觀層次)。
import os
Const_Image_Format = [".jpg",".jpeg",".bmp",".png"]
class FileFilt:
fileList = [""]
counter = 0
def __init__(self):
pass
def FindFile(self,dirr,filtrate = 1):
global Const_Image_Format
for s in os.listdir(dirr):
newDir = os.path.join(dirr,s)
if os.path.isfile(newDir):
if filtrate:
if newDir and(os.path.splitext(newDir)[1] in Const_Image_Format):
self.fileList.append(newDir)
self.counter+=1
else:
self.fileList.append(newDir)
self.counter+=1
if __name__ == "__main__":
b = FileFilt()
b.FindFile(dirr = "D:\Python27\user\dapei-imgs")
print(b.counter)
for k in b.fileList:
print k