国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python遍歷目錄中的所有文件的方法

2019-11-25 16:39:12
字體:
來源:轉載
供稿:網友

os.walk生成器
os.walk(PATH), PATH是個文件夾路徑,當然可以用.或者../這樣啦.
返回的是個三元元組為元素的列表, 每個元素代表了一個文件夾下的內容.第一個就是當前文件夾下內容.
返回的三元元組代表(該工作文件夾, 該文件夾下的文件夾的列表, 該文件夾下文件的列表).
所以,
獲得所有子文件夾, 就是(d代表這三元元組):

os.path.join(d[0],d[1]);

獲得所有子文件, 就是:

 os.path.join(d[0],d[2]);

以下例子使用了兩套循環, 遍歷后得到所有文件名的list后再循環所有文件:

result = [os.path.join(dp, f) for dp, dn, fs in os.walk("_pages") for f in fs if os.path.splitext(f)[1] == '.html']for fname in result: #do something

實際等于

result=[]for dp, dn, fs in os.walk("_pages"): for f in fs: if (os.path.splitext(f)[1] == '.html'):  result.append(os.path.join(dp, f))for fname in result: #do something

最后判斷是否html后綴獲得文件名, 還可以使用glob:

result = [y for x in os.walk(PATH) for y in glob.glob(os.path.join(x[0], '*.txt'))]

還可以使用迭代器方法:

from itertools import chainimport globresult = (chain.from_iterable(glob.iglob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))

進階
標準文件數遍歷生成器os.walk既強大又靈活,不過os.walk還缺乏應用程序需要的一些細節上的處理能力,例如根據某種模式選擇文件,對所有文件(或目錄)進行排序,或只遍歷當前目錄不進入其子目錄,因此需要對接口對應進行封裝。

import os, fnmatch  def filter_files(dirname, patterns='*', single_level=False, yield_folders=False):   patterns = patterns.split(';')   allfiles = []   for rootdir, subdirname, files in os.walk(dirname):     print subdirname     allfiles.extend(files)     if yield_folders:       allfiles.extend(dubdirname)     if single_level:       break   allfiles.sort()   for eachpattern in patterns:     for eachfile in fnmatch.filter(allfiles, eachpattern):         print os.path.normpath(eachfile) 

說明:
1.extend與append的區別
列表是以類的形式實現的。“創建”列表實際上是將一個類實例化。因此,列表有多種方法可以操作。  列表可包含任何數據類型的元素,單個列表中的元素無須全為同一類型。 append() 方法向列表的尾部添加一個新的元素。只接受一個參數,extend()方法只接受一個列表作為參數,并將該參數的每個元素都添加到原有的列表中。
2. fnmatch模塊
fnmatch 模塊使用模式來匹配文件名。模式語法和 Unix shell 中所使用的相同. 星號(*) 匹配零個或更多個字符, 問號(?) 匹配單個字符。你也可以使用方括號來指定字符范圍,例如 [0-9] 代表一個數字,其他所有字符都匹配它們本身。
1) fnmatch.fnmatch(name, pattern)方法:測試name是否匹配pattern,返回true/false
2) fnmatch.filter(names, pat)實現列表特殊字符的過濾或篩選,返回符合匹配模式的字符列表,當然names表示的是列表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇远县| 抚州市| 繁昌县| 秦皇岛市| 黔西| 南川市| 法库县| 上林县| 德钦县| 沂水县| 林州市| 金阳县| 东城区| 潼关县| 蓬安县| 盐边县| 郁南县| 灵石县| 揭西县| 古浪县| 龙山县| 高平市| 金寨县| 弥勒县| 新和县| 克拉玛依市| 内乡县| 潞西市| 波密县| 天峻县| 皮山县| 卓尼县| 东方市| 牡丹江市| 鱼台县| 铁岭市| 修文县| 拉萨市| 左贡县| 株洲市| 南岸区|