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
将 " 替换为 ',一切正常
我刚开始使用我的第一个 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
将 " 替换为 ',一切正常