Python 递归文件搜索

Python recursive file search

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

目标: 我想获取存储在 ./pages/ 下的所有 *.md 文件。当我阅读 os 的步行功能时,似乎是实现此目标的最简单方法。

问题: 我现在得到的结果是不正确的。它似乎朝着正确的方向发展,但有些事情并没有按照它应该的方式进行。 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 文件的正确条件是什么?

提前致谢。

您的代码运行良好,但您可能误解了它。如您所见,所有 *.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/")

这就是它的工作原理:

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

将 " 替换为 ',一切正常