[x for x in p.iterdir() if x.is_dir()]:生成路径对象p指向的文件夹下所有的子目录形成的列表。拆开的解释如下:for x in p.iterdir(),for循环内x遍历p指向的文件夹;if x.is_dir(),筛选出文件夹;[x for……]:,筛选出来的结果放进列表。如果想打印出当前目录下所有子目录的名字:
p = Path(‘.’)
for f in [x for x in p.iterdir() if x.is_dir()]:
print(f.name)
[x for x in p.iterdir() if x.is_file()]:生成路径对象p指向的目录下所有文件对象的列表。
列出当前目录树(当前目录以及子目录以及子目录的子目录……)下的所有文件:
for f in p.glob('**/*.*'):
print(f.name)
# p.glob('**/*.*')的'**/*.*'不能替换成'*/*.*',p.glob('*/*.*')不会检索p指向的文件夹下的文件。
列出当前目录树(当前目录以及子目录以及子目录的子目录……)下的所有.py文件:
for f in p.glob('**/*.py'):
print(f.name)
列出当前目录(不包括子目录)下的所有.py文件
for f in p.glob('*.py'):
print(f.name)
遍历指定目录currentFolder下所有以viva_la_vida为文件名但扩展名不同的文件,viva_la_vida.jpg、viva_la_vida.mp3、viva_la_vida.txt都符合条件。从中找出扩展名是mp3的那个,输出文件名和文件大小。找到扩展名为txt的,输出文件内容:
currentFolder = Path(‘/Users/PythonABC/Documents/myCollection/’)
for f in currentFolder.glob('viva_la_vida.*'):
# 找出currentFolder文件夹下所有文件名是viva_la_vida扩展名随意的文件。
if f.suffix == '.mp3': # 扩展名是mp3的文件满足条件。
print(f.name, f.stat().st_size)
# 打印文件尺寸。f.stat()返回路径对象f的信息,st_size是文件尺寸。
elif f.suffix == ‘.txt’: # txt文本文件满足条件。
print(f.read_text(encoding=’utf-8’))
# f.read_text()返回f指向的文本文件的内容子串,encoding=支持输出中文内容。