在Python中寻找类似于Java的文件遍历函数
在Java中,我们可以执行File.listFiles()并接收目录中的所有文件。然后,我们可以轻松地遍历目录树。
有没有类似的方法可以在Python中做到这一点?
解决方案
直接来自Python的参考库
>>> import glob >>> glob.glob('./[0-9].*') ['./1.gif', './2.txt'] >>> glob.glob('*.gif') ['1.gif', 'card.gif'] >>> glob.glob('?.gif') ['1.gif']
尝试在os模块(docs)中使用" listdir()":
import os print os.listdir('.')
看一下os.walk()和这里的例子。使用os.walk()
,我们可以轻松地处理整个目录树。
上方链接中的示例...
# Delete everything reachable from the directory named in 'top', # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))
就在这里。 Python的方式更好。
有三种可能性:
1)像File.listFiles()一样:
Python具有函数os.listdir(path)。它的工作方式类似于Java方法。
2)使用glob扩展路径名模式:
glob模块包含使用Unix shell之类的模式在文件系统上列出文件的功能,例如模式。
`
files = glob.glob('/usr/joe/*.gif')
`
3)遍历文件遍历:
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
`
我们甚至可以在运行中从"目录"中删除目录以避免进入该目录:如果目录中的" joe":dirs.remove(" joe")避免进入名为" joe"的目录。
listdir和walk在此处记录。
此处记录了glob。
如果还需要子目录,请使用os.path.walk。
walk(top, func, arg) Directory tree walk with callback function. For each directory in the directory tree rooted at top (including top itself, but excluding '.' and '..'), call func(arg, dirname, fnames). dirname is the name of the directory, and fnames a list of the names of the files and subdirectories in dirname (excluding '.' and '..'). func may modify the fnames list in-place (e.g. via del or slice assignment), and walk will only recurse into the subdirectories whose names remain in fnames; this can be used to implement a filter, or to impose a specific order of visiting. No semantics are defined for, or required of, arg, beyond that arg is always passed to func. It can be used, e.g., to pass a filename pattern, or a mutable object designed to accumulate statistics. Passing None for arg is common.
我建议不要使用" os.path.walk",因为它已在Python 3.0中删除。无论如何,os.walk
更简单,或者至少我发现它更简单。
作为一个长期使用Python的人,我不得不说std库中的路径/文件操作函数是低于标准的:它们不是面向对象的,它们反映了一种过时的let-wrap-OS-system-functions-out-思维哲学。我衷心推荐"路径"模块作为包装器(如果必须知道,请围绕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()