Python中如何遍历指定目录下的所有文件?

Python中如何遍历指定目录下的所有文件?,第1张

例如:在C:\TDDOWNLOAD目录下有a.txt、b.txt两个文件,另有\sub1子文件夹,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt两个文件。

1. os.walk

os.walk()返回一个三元素的tuple:当前路径、子文件夹名称、文件列表。

>>>import os

>>>def fun( path ):

... for root, dirs, files in os.walk( path ):

... for fn in files:

... print root, fn

...

>>>fun( r'C:\TDDOWNLOAD' )

C:\TDDOWNLOAD a.txt

C:\TDDOWNLOAD b.txt

C:\TDDOWNLOAD\sub1 c.txt

C:\TDDOWNLOAD\sub1 d.txt

>>>

2. glob.glob

glob.glob()只接受渗握一个参数,这个参数既代有路径,又代有匹配模式,返回值为一个列表。注意,glob.glob()无法直接穿透子文启野件夹,需要自己处理:

>>>def fun( path ):

... for fn in glob.glob( path + os.sep + '*' ): # '*'代表匹配所有文件

... if os.path.isdir( fn ): # 如果结果为文件夹

... fun( fn ) # 递归

... else:

... print fn

...

>>>fun( r'C:\TDDOWNLOAD' )

C:\TDDOWNLOAD\a.txt

C:\TDDOWNLOAD\b.txt

C:\TDDOWNLOAD\sub1\c.txt

C:\TDDOWNLOAD\sub1\d.txt

>>>

'*'为匹配模式,代表匹配所有文件,只有这悄喊喊样才能将子文件夹查出来,以便递归深入,探查下一层的文件。

最近刚写的,可以遍历指定目录下的所有文件、文件夹、特定后缀的文件:

/**

 * 遍历目录

 * @param string $dir 绝对/相对路径

 * @param string $filter 默认*返回所有文件及文件夹,*.php仅返回php文件,消厅如果$patten为GLOB_BRACE可实现多文件筛选,如*.{php,html},返回php和html文件

 * @param const $patten 默认GLOB_BRACE,可选:GLOB_ONLYDIR,更多参数请参考手册

 * @param string/bool $nocache 防止本次调用的结果缓存上次的结果,如果一个脚本仅调用凳明一次本函数,则不用管,否则得设个值

 * @return array

 */

function globdir($dir, $filter = '*', $patten = GLOB_BRACE, $nocache = null) {

    static $file_arr = array ()

    isset($nocache) && $file_arr = array ()

    if (!is_dir($dir)) return

    if ($patten == GLOB_ONLYDIR) {

        $code = 'if (is_dir($file)) {$file_arr[] = $fileglobdir($file, "*", GLOB_ONLYDIR)}'

    } else {

        $code = 'is_file($file) ? $file_arr[] = $file : globdir($file,"' . 枣桥告$filter . '",' . $patten . ')'

    }

    array_walk(glob("{$dir}/{$filter}", $patten), create_function('$file, $k, $file_arr', $code), &$file_arr)

    if ($filter != '*') {

        array_walk(glob("{$dir}/*", GLOB_ONLYDIR), create_function('$dir,$k,$param', 'list($filter, $patten) = explode("|", $param)globdir($dir, $filter, $patten)'), "{$filter}|{$patten}")

    }

    return $file_arr

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12115687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存