例如:在C:\TDDOWNLOAD目錄下有a.txt、b.txt兩個(gè)文件,另有\(zhòng)sub1子文件夾,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt兩個(gè)文件。 1. os.walk os.walk()返回一個(gè)三元素的tuple:當(dāng)前路徑、子文件夾名稱、文件列表。 import os def fun( path ):... for root, dirs, files in os.walk( path ):... for fn in files:... print root, fn... fun( r'C:\TDDOWNLOAD' )C:\TDDOWNLOAD a.txtC:\TDDOWNLOAD b.txtC:\TDDOWNLOAD\sub1 c.txtC:\TDDOWNLOAD\sub1 d.txt 2. glob.glob glob.glob()只接受一個(gè)參數(shù),這個(gè)參數(shù)既代有路徑,又代有匹配模式,返回值為一個(gè)列表。注意,glob.glob()無(wú)法直接穿透子文件夾,需要自己處理: def fun( path ):... for fn in glob.glob( path + os.sep + '*' ): # '*'代表匹配所有文件... if os.path.isdir( fn ): # 如果結(jié)果為文件夾... fun( fn ) # 遞歸... else:... print fn... fun( r'C:\TDDOWNLOAD' )C:\TDDOWNLOAD\a.txtC:\TDDOWNLOAD\b.txtC:\TDDOWNLOAD\sub1\c.txtC:\TDDOWNLOAD\sub1\d.txt '*'為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來(lái),以便遞歸深入,探查下一層的文件。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、硯山網(wǎng)站維護(hù)、網(wǎng)站推廣。
Python的for...in 循環(huán)有三種常見(jiàn)用法:
第一,按長(zhǎng)度遍歷 :
若不需要索引號(hào)index,可以直接用"for obj in obj-list"語(yǔ)句遍歷
第二,若既需要索引,又需要成員值,可以用enumerate()函數(shù)
enumerate() 函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串),同時(shí)輸出數(shù)據(jù)和數(shù)據(jù)下標(biāo),常用于for-in循環(huán)。
第三,不關(guān)心索引,只希望同時(shí)遍歷多個(gè)列表,可以用zip函數(shù)。
zip函數(shù)將多個(gè)列表作為輸入,在每次迭代的時(shí)候,將每個(gè)列表的當(dāng)前成員組合成一個(gè)元組輸出。
1. 基本實(shí)現(xiàn)
[root@localhost ~]# cat dirfile.py
import os
path='/tmp'for dirpath,dirnames,filenames in os.walk(path): ? ?for file in filenames:
fullpath=os.path.join(dirpath,file) ? ? ? ? ? ?print fullpath
執(zhí)行結(jié)果如下:
[root@localhost ~]# python dirfile.py
/tmp/yum.log/tmp/pulse-3QSA3BbwpQ49/pid/tmp/pulse-3QSA3BbwpQ49/native/tmp/.esd-0/socket
2. 在上例的基礎(chǔ)上傳遞參數(shù)
import os,sys
path=sys.argv[1]for dirpath,dirnames,filenames in os.walk(path): ? ?for file in filenames:
fullpath=os.path.join(dirpath,file) ? ? ? ? ? ?print fullpath
執(zhí)行方式為:[root@localhost ~]# python dirfile.py /tmp
在這里,sys.argv[1]是接受參數(shù),也可以定義sys.argv[2]接受第二個(gè)參數(shù)
3. 如何用函數(shù)實(shí)現(xiàn)
import os,sys
path='/tmp'def paths(path):
path_collection=[] ? ? ? ?for dirpath,dirnames,filenames in os.walk(path): ? ? ? ? ? ? ? ?for file in filenames:
fullpath=os.path.join(dirpath,file)
path_collection.append(fullpath) ? ? ? ?return path_collectionfor file in paths(path): ? ? ? ?print file
4. 如何封裝成類
import os,sysclass diskwalk(object): ? ? ? ?def __init__(self,path):
self.path = path ? ? ? ?def paths(self):
path=self.path
path_collection=[] ? ? ? ? ? ? ? ?for dirpath,dirnames,filenames in os.walk(path): ? ? ? ? ? ? ? ? ? ? ? ?for file in filenames:
fullpath=os.path.join(dirpath,file)
path_collection.append(fullpath) ? ? ? ? ? ? ? ?return path_collectionif __name__ == '__main__': ? ? ? ?for file in diskwalk(sys.argv[1]).paths(): ? ? ? ? ? ? ? ?print file
PS:
1 def __init__():函數(shù),也叫初始化函數(shù)。
self.path = path可以理解為初始化定義了1個(gè)變量。 在后面的def里面調(diào)用的時(shí)候必須要使用self.path而不能使用path
2?__name__ == '__main__'
模塊是對(duì)象,并且所有的模塊都有一個(gè)內(nèi)置屬性 __name__。一個(gè)模塊的 __name__ 的值取決于您如何應(yīng)用模塊。如果 import 一個(gè)模塊,那么模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴(kuò)展名。但是您也可以像一個(gè)標(biāo)準(zhǔn)的程序樣直接運(yùn)行模塊,在這種情況下, __name__ 的值將是一個(gè)特別缺省"__main__"。上述類中加上__name__ == '__main__'的判斷語(yǔ)句,可以直接在終端環(huán)境下執(zhí)行python dirfile.py /tmp進(jìn)行測(cè)試,不必非得在交互式環(huán)境下導(dǎo)入模塊進(jìn)行測(cè)試。