寻找类似Java的Python文件遍历函数

10 投票
9 回答
9278 浏览
提问于 2025-04-11 09:22

在Java中,你可以使用File.listFiles()这个方法来获取一个文件夹里的所有文件。这样你就可以很方便地遍历整个文件夹及其子文件夹。

那么在Python中,有没有类似的方法可以做到这一点呢?

9 个回答

3

试试在os模块里用“listdir()”这个函数(文档):

import os
print os.listdir('.')
5

作为一个长期使用Python的人,我得说,标准库里的路径和文件操作函数实在不怎么样:它们不是面向对象的,而且反映了一种过时的思维方式,就是把操作系统的函数简单包裹起来,完全不考虑其他。 我强烈推荐使用'path'模块,它是对os、os.path、glob和tempfile的一个封装(如果你想知道的话):用起来更舒服,而且更符合面向对象的编程风格:http://pypi.python.org/pypi/path.py/2.2

这是使用path模块的walk()函数:

dir = path(os.environ['HOME'])
for f in dir.walk():
    if f.isfile() and f.endswith('~'):
        f.remove()
25

是的,确实有办法。而且用Python的方法更好。

有三种选择:

1) 像 File.listFiles() 一样:

Python有一个叫os.listdir(path)的函数。它的功能和Java的方法差不多。

2) 使用glob进行路径模式扩展:

glob模块里有一些函数,可以用类似Unix命令行的方式列出文件,比如说

files = glob.glob('/usr/joe/*.gif')

3) 使用walk进行文件遍历:

Python的os.walk函数非常好用。

这个walk方法会返回一个生成器函数,它可以递归地列出从指定起始路径开始的所有目录和文件。

举个例子:

import os
from os.path import join
for root, dirs, files in os.walk('/usr'):
   print "Current directory", root
   print "Sub directories", dirs
   print "Files", files
你甚至可以在运行时从“dirs”中移除某些目录,以避免进入那些目录:比如如果“joe”在dirs里,就用dirs.remove("joe")来避免进入名为“joe”的目录。

listdir和walk的详细说明可以在这里找到。 glob的说明可以在这里找到。

撰写回答