如何遍历python中的目录?

时间:2015-07-09 11:39:28

标签: python directory-structure

我有这段代码:

def traverse_dir(fd):      

    for dir_path,subpaths,files in os.walk(fd): 
        print dir_path,subpaths
        for file in files:
            print "file:%s"  %file

def traverse_func(arg,dirname,files):   

    print dirname
    for file in files:
            print "file:%s"  %file

os.path.walk(r".",traverse_func,())

我应该使用os.walk()还是os.path.walk(),为什么?

或者还有其他更好的方法吗?

4 个答案:

答案 0 :(得分:2)

这取决于您使用的Python版本。在Python 2中有os.path.walk()docs)但在Python 3中已被弃用并替换为os.walk()docs)。

您声称在评论中使用的Python(x,y),seems to be based on Python 2

答案 1 :(得分:1)

os.walk(dir)返回一个元组,你必须解包。

for a, b, c in os.walk(dir):
  print("{} contains the directories {} and the files {}".format(a, b, c))

真的很简单。

对于Python 3.6+,您可以稍微简化一下:

for a, b, c in os.walk(dir):
  print(f"{a} contains the directories {b} and the files {c}")

答案 2 :(得分:1)

{3}}函数已弃用,在Python 3中不再可用。出于这个原因,您应该更喜欢os.path.walk()

os.walk()也可以通过将followlinks参数设置为True来跟踪目录的符号链接。要对os.path.walk()执行相同操作,您必须专门检查每个目录是否为sym链接,并自行解决。 os.walk()还有其他几个可能有用的选项,所以总体来说,选择它os.path.walk()

答案 3 :(得分:0)

你可以实现相同的。

os.listdir() + 递归

def traverseFolder(ROOT):

    for entry in os.listdir(ROOT):
        path = os.path.join(ROOT,entry)
        if os.path.isdir(path):
            traverseFolder(path)  #call to process sub-directory
        else:
            fhand = open(path,'r')
            data = fhand.read()
            ......


traverseFolder('path/someFolder')