刚好刚才写了一个
def get_dir_info(dir_path, deep=0, info=None):if info is None:
info = {'deep': 0, 'deep_dir': '', 'file_num': 0, 'dir_num': 0}
if deep > info['deep']:
info['deep'] = deep
info['deep_dir'] = dir_path
file_list = os.listdir(dir_path)
for file in file_list:
file_path = os.path.join(dir_path, file)
if os.path.isdir(file_path):
info['dir_num'] += 1
get_dir_info(file_path, deep=deep+1, info=info)
else:
info['file_num'] += 1
if deep == 0:
return info
if __name__ == '__main__':
dir_path = "D:\\Tools\\WebStorm2016\\plugins"
s = time.time()
d = get_dir_info(dir_path)
print("{}".format(time.time() - s))
print(d)
# 所有的深度是基于给出的文件夹统计的
# deep_dir比较鸡肋, 因为如果有多个相同深度的文件夹就会替换掉只剩一个
# 可以自行去掉这个功能
# deep: 最深的层数
# deep_dir: 最深的路径名称
# dir_num: 文件夹数量
# file_num: 文件数量
'''
0.21001195907592773
{'deep': 12, 'deep_dir': 'D:\\Tools\\WebStorm2016\\plugins\\spy-js\\server\\node_modules\\istanbul\\node_modules\\resolve\\test\\resolver\\biz\\node_modules\\garply\\lib', 'file_num': 6325, 'dir_num': 1113}
'''
如果想把该目录下所有的文件都统计出来,包括子目录、子目录的子目录。。。可以使用os.walk来找出目录下所有的文件
import os
print sum([len(x) for _, _, x in os.walk(os.path.dirname("test"))])
#test是目录名
os.walk会递归遍历指定目录下的文件,返回值分别为当前文件夹完整路径,当前文件夹中的文件夹和文件夹中的文件。我们只需要文件,所以其他的都不取出来了,直接使用"_"占位就行了。
如果只是想统计出当前目录下的文件,不包括子目录的。就使用os.listdir,只统计是文件的个数:
len([x for x in os.listdir(os.path.dirname(__file__)) if os.path.isfile(x)])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)