python 请教一个遍历目录更快的方法
本帖最后由 wkdxz 于 2022-8-4 11:54 编辑最近在做遍历目录的程序,遇到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)
第二种:
import os
def get_all_dirs(path, kw='*'):
cmd = f'dir /s/b/ad {path}'
if kw == '*':
return
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
path = r'E:\xx共享\其他文件\EXE'
print(get_all_dirs(path))
print(get_all_files(path, 'txt'))
因为处理的文件都在Windows系统,所以是否使用os.popen倒还无所谓。
速度方面,第二种明显快得多,之前还使用过glob库来写,但都没有 cmd 自带的 dir 使用起来得心应手。
兄弟们还有没有其他的遍历文件夹的代码,发来参考下。{:1_893:} 这个可以不?https://www.runoob.com/python/os-walk.html 漁滒 发表于 2022-8-4 12:00
这个可以不?https://www.runoob.com/python/os-walk.html
可以是可以,但是如果只是纯粹输出所有文件和所有文件夹, 用dir简单很多.如果里面涉及操作,判断,那用walk了 from pathlib import Path 这个模块可以试一下。
path.iterdir() 遍历子目录用的 tinyDust 发表于 2022-8-4 13:19
from pathlib import Path 这个模块可以试一下。
path.iterdir() 遍历子目录用的
有用的知识又增加了!{:1_893:}
from pathlib import Path as path
def all_dirs_from(dir_path):
p = path(dir_path)
return
def all_files_from(dir_path):
p = path(dir_path)
return
def special_file_from(dir_path, file_type):
p = path(dir_path)
return 漁滒 发表于 2022-8-4 12:00
这个可以不?https://www.runoob.com/python/os-walk.html
这个可以有 pathlib 大法好,既不用+号拼接路径,也不用怕中文路径
页:
[1]