2021-05-02 使用 os.listdir() 列出文件夹中的文件列表

为测试功能,建如下目录树:

 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]
>>> 

 

上一篇:暴力破解解压码


下一篇:Python批量修改文件名