吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1158|回复: 6
收起左侧

[讨论] python 请教一个遍历目录更快的方法

[复制链接]
wkdxz 发表于 2022-8-4 11:48
本帖最后由 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 使用起来得心应手。
兄弟们还有没有其他的遍历文件夹的代码,发来参考下。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ccshm1977 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

漁滒 发表于 2022-8-4 12:00

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
独念成慕 + 1 + 1 谢谢@Thanks!

查看全部评分

sxfxtf 发表于 2022-8-4 12:43
漁滒 发表于 2022-8-4 12:00
这个可以不?  https://www.runoob.com/python/os-walk.html

可以是可以,但是如果只是纯粹输出所有文件和所有文件夹, 用dir简单很多.如果里面涉及操作,判断,那用walk了
tinyDust 发表于 2022-8-4 13:19
from pathlib import Path 这个模块可以试一下。
path.iterdir()        遍历子目录用的
 楼主| wkdxz 发表于 2022-8-4 14:47
tinyDust 发表于 2022-8-4 13:19
from pathlib import Path 这个模块可以试一下。
path.iterdir()        遍历子目录用的

有用的知识又增加了!

[Python] 纯文本查看 复制代码
from pathlib import Path as path


def all_dirs_from(dir_path):
    p = path(dir_path)
    return [i for i in p.iterdir() if i.is_dir()]


def all_files_from(dir_path):
    p = path(dir_path)
    return [i for i in p.iterdir() if i.is_file()]


def special_file_from(dir_path, file_type):
    p = path(dir_path)
    return [i for i in p.glob(f'**/*.{file_type}') if i.is_file()]
 楼主| wkdxz 发表于 2022-8-4 14:49
漁滒 发表于 2022-8-4 12:00
这个可以不?  https://www.runoob.com/python/os-walk.html

这个可以有
emptynullnill 发表于 2022-8-4 16:47
pathlib 大法好,既不用+号拼接路径,也不用怕中文路径
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 17:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表