为测试功能,建如下目录树:
D:\test 的目录
2021/05/02 22:56 <DIR> 01
2021/05/02 22:56 <DIR> 02
2021/04/03 12:09 1,486 01.py
2021/04/03 12:09 1,262 02.py
2 个文件 2,748 字节D:\test\01 的目录
2021/04/03 12:09 1,088 1.1.py
2021/04/03 12:09 1,096 1.2.py
2021/04/03 12:09 1,472 1.3.py
3 个文件 3,656 字节D:\test\02 的目录
2021/04/03 12:09 2,014 2.1.py
2021/04/03 12:09 2,195 2.2.py
2021/04/03 12:09 1,207 2.3.py
2021/04/03 12:09 1,228 2.4.py
4 个文件 6,644 字节所列文件总数:
9 个文件 13,048 字节
os.listdir 相当于dos命令dir d:\test,只显示第一层目录下的文件和子目录。
>>> import os
>>> path=r'd:\test'
>>> os.listdir(path)
['01', '01.py', '02', '02.py']
>>>
返回的列表不分辨是文件还是子目录,可以用os.path.isdir() 或 isfile()判断:
>>> def isPath(f):
return '<DIR>' if os.path.isdir(f) else ''
>>> [(f+isPath(path+'\\'+f)) for f in os.listdir(path)]
['01<DIR>', '01.py', '02<DIR>', '02.py']
>>> def isPath(f):
return '' if os.path.isfile(f) else '<DIR>'
>>> [(f+isPath(path+'\\'+f)) for f in os.listdir(path)]
['01<DIR>', '01.py', '02<DIR>', '02.py']
也可以直接上表达式,不用自定义函数:
>>> [f+'<DIR>' if os.path.isdir(path+'\\'+f) else f for f in os.listdir(path)]
['01<DIR>', '01.py', '02<DIR>', '02.py']
>>> [f if os.path.isfile(path+'\\'+f) else f+'<DIR>' for f in os.listdir(path)]
['01<DIR>', '01.py', '02<DIR>', '02.py']
>>>
还能用listdir()返回子目录的文件数,如果出错返回-1表示文件(返回0表示是空目录):
>>> def isPath(path):
try:return len(list(os.listdir(path)))
except NotADirectoryError:return -1
>>> [isPath(path+'\\'+i) for i in os.listdir(path)]
[3, -1, 4, -1]
>>>