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 chain
import glob
result = (chain.from_iterable(glob.iglob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))