我试图遍历子目录列表,并执行两个相关操作:
仅选择与特定模式匹配的子目录,并保存该名称的一部分
读取该子目录中的文件
我曾尝试调整此问题的答案,但仅打开某些子目录有困难。我知道我可以递归地执行此操作,在其中循环遍历每个文件,并使用来拉出其父目录Path.parent
,但这也将进入我不感兴趣的目录。
我的文件结构如下:
002normal
|- names.txt
|- test.txt
002custom
|- names.txt
|- test.txt
我只希望以“普通”结尾的目录。然后,我将在该目录中读取名为“ names.txt”的文件。我已经尝试过以下类似的方法,但是没有运气。
import os
root_dir = "/Users/adamg/IM-logs"
for subdir, dirs, files in os.walk(root_dir):
for f in files:
print(subdir)
您可以dirs
就地修改列表,以过滤出名称不以结尾结尾的任何子目录,'normal'
这样os.walk
就不会遍历它们:
for subdir, dirs, files in os.walk(root_dir):
dirs[:] = (name for name in dirs if name.endswith('normal'))
if 'names.txt' in files:
with open(os.path.join(subdir, 'names.txt')) as file:
print(os.path.basename(subdir), file.read())
摘录自os.walk
:
当
topdown
为is时True
,调用者可以dirnames
就地修改列表(可能使用del
或切片分配),并且walk()
仅递归到名称保留在的子目录中dirnames
。它可以用来简化搜索,强加特定的访问顺序,甚至可以walk()
在调用者walk()
再次恢复之前通知其创建或重命名的目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句