python - 使用 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
真的很适合这个。它返回与特定模式匹配的所有文件。
这些模式有一个参考,但最有用的是:
*
匹配除路径斜线以外的所有内容(\
对于 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"))
在这里查看结果
如果bar
不一定是 base_path 的直接子目录,而是进一步嵌套,则可以使用**
:
from glob import glob
filenames = glob(os.path.join(base_path, "**", "bar", "*", "*.dat"))
最后,glob 不一定会以任何顺序返回文件。要按字母顺序获取它们,请使用sorted(filenames)
. sorted(filenames, key=os.path.getmtime)
按照这个答案让它们按修改顺序使用。
推荐阅读
- kubernetes - 如何在同一 POD 的不同实例中将环境变量设置为不同的值?
- c++ - #pragma 警告不适用于 catch 语句
- github - 如何自动更新 github action runner
- react-native - react-native 材质下拉列表中的状态使用
- java - 如何通过滚动一项来水平滚动列表视图中的其他项目?
- python-3.x - 我如何只读取 .text 文件的特定行?Python
- c - 我可以在 C 中 typedef struct aaa struct x_aaa 吗?
- mysql - AWS RDS 可以开箱即用地进行列级加密吗?
- c - TCP C 程序自动重新连接到客户端
- android - Android 10 中的应用程序图标有时是错误的