本帖最后由 wkdxz 于 2022-8-4 11:54 编辑
最近在做遍历目录的程序,遇到python遍历目录的问题,尝试了两种方法:
第一种:
[Python] 纯文本查看 复制代码 import os
all_dirs_list = []
all_files_list = []
def get_dir_full_path(path): # 目录下目录(完整路径)
return [
os.path.join(path, i) for i in os.listdir(path)
if os.path.isdir(os.path.join(path, i))
]
def get_file_full_path(path): #目录下文件(完整路径)
return [
os.path.join(path, i) for i in os.listdir(path)
if os.path.isfile(os.path.join(path, i))
]
def get_all_dirs(path): #遍历所有目录,递归
for DIR in get_dir_full_path(path): #获取主目录下目录
all_dirs_list.append(DIR)
if get_dir_full_path(DIR): #如果子目录下还有子目录,递归获取
get_all_dirs(DIR)
return all_dirs_list
def get_all_files(path): #遍历所有文件,递归
all_files_list.extend(get_file_full_path(path)) #获取主目录下文件
if dirs_in_path := get_dir_full_path(path): #如果有子目录,获取子目录下文件
for DIR in dirs_in_path:
get_all_files(DIR)
return all_files_list
folder = r'E:\xx共享'
for i in get_all_files(folder):
houzhui = os.path.splitext(i)[-1].lower()
if houzhui in ['.cmd']: #筛选指定类型文件
print(i)
第二种:
[Python] 纯文本查看 复制代码 import os
def get_all_dirs(path, kw='*'):
cmd = f'dir /s/b/ad {path}'
if kw == '*':
return [i.strip() for i in os.popen(cmd)]
else:
return [
i.strip() for i in os.popen(cmd) if kw in os.path.split(i)[-1]
]
def get_all_files(path, houzhui='*', kw='*'):
cmd = f'dir /s/b/a-d {path}\*{kw}*.{houzhui}'
return [i.strip() for i in os.popen(cmd)]
path = r'E:\xx共享\其他文件\EXE'
print(get_all_dirs(path))
print(get_all_files(path, 'txt'))
因为处理的文件都在Windows系统,所以是否使用os.popen倒还无所谓。
速度方面,第二种明显快得多,之前还使用过glob库来写,但都没有 cmd 自带的 dir 使用起来得心应手。
兄弟们还有没有其他的遍历文件夹的代码,发来参考下。 |