Python递归文件搜索

时间:2018-04-14 13:30:53

标签: python python-3.x os.walk

我刚开始使用我的第一个Python脚本。现在我面临一个问题,这似乎超出了我目前的技能。

目标: 我希望将所有* .md文件存储在./pages/下。当我读到os的walk函数似乎是实现这个目标的最简单的方法。

问题: 我现在得到的结果是不正确的。它似乎是在正确的方向,但有些东西不应该像它应该的那样。 if语句总是导致else子句,我真的不知道为什么。除了找到所有.md文件之外,if条件永远不会为真。

#!/usr/bin/env python
import os
import sys
import glob

def get_mds(): 
  for root, dirs, files in os.walk("./pages/"):
    for name in files:
      if name.endswith((".md")):
        print("success")
      else:
        print(os.path.join(root, name))

以下是此脚本的输出。

# Output
./pages/01.home/wizard.png
./pages/01.home/deploy-key.png
./pages/01.home/workflow.png
./pages/01.home/default.md <- MD
./pages/01.home/webhooks.png
./pages/01.home/01.how-to/default.md <- MD

正如您所见,找到了所有.md文件。但它总是以else子句结束。匹配* .md文件的正确条件是什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您的代码运行良好,但也许您误解了它。正如您所看到的,* .md位于./pages/01.home目录下,但是,您的files列表只包含“./pages”下的所有文件。这是一个简单的修改代码,用于获取根路径下的所有文件和第一个子目录。

import os
import sys
import glob

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

def get_mds(path): 
    files_result = []
    for root, dirs, files in os.walk(path):
        files_result.extend(files)
        for dir in dirs:
            files_result.append(get_files(path+dir))

    for name in files_result:
        if name.endswith((".md")):
            print("success")
        else:
            print(os.path.join(root, name))

get_mds("./pages/")

答案 1 :(得分:0)

它是如何运作的:

for root, dirs, files in os.walk("./pages/"):
   for name in files:
     if name.endswith('.md'):
       print(os.path.join(root, name))
     else:
       continue

输出:

./pages/01.home/01.how-to/default.md
./pages/01.home/default.md

取代&#34;用&#39;一切都按预期工作