如何解决使用python os.walk如何检查目录名称并仅在特定目录中递归处理那些文件?
我正在使用os.walk来运行目录“ foo”。我想处理.dat文件,但是如何检查目录名称而仅处理特定目录?
如果dir =“ bar”,则处理files.dat。不要处理“ notbar”。我可能缺少一些简单的东西
C:\data\foo
- notbar
-123
-file1.dat
-456
-file2.dat
-file3.dat
- bar
-123
-file1.dat
-456
-file2.dat
-file3.dat
这将找到所有.dat文件。...
for (root,dirnames,filenames) in os.walk(base_path):
print('Found directory: {0}'.format(root))
for filename in filenames:
if filename.endswith(".dat"):
print(filename)
解决方法
glob
确实非常有用。它返回所有与特定模式匹配的文件。
模式有一个reference,但最有用的是:
-
*
匹配除路径斜杠之外的所有内容(对于Windows,\
,对于Mac / linux,/
) -
**
匹配零个或多个目录
在您的示例中,您想在其中的子目录(.dat
)的任何子目录(*.dat
)中找到*
(bar
)个文件基本路径base_path
。要获取这些文件,我们可以编写
from glob import glob
filenames = glob(base_path + "\\bar\\*\\*.dat")
最好将os.path.join
用于跨平台:
from glob import glob
filenames = glob(os.path.join(base_path,"bar","*","*.dat"))
查看结果here
如果bar
不一定是base_path的直接子目录,而是嵌套得更深,则可以使用**
:
from glob import glob
filenames = glob(os.path.join(base_path,"**","*.dat"))
最后,glob不一定会以任何顺序返回文件。要按字母顺序获取它们,请使用sorted(filenames)
。要按照修改后的顺序使用它们,请按照this answer使用sorted(filenames,key=os.path.getmtime)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。