gpt4 book ai didi

python - os.walk 带通配符的路径

转载 作者:行者123 更新时间:2023-11-30 22:58:09 25 4
gpt4 key购买 nike

我想遍历一个目录并搜索给定的文件。这是我编写的一些代码:

import os
def find(filename, path):
for root, dirs, files in os.walk(path):
for file in files:
if file==filename:
print(os.path.join(root, file))

# Python boiler plate call.
if __name__ == "__main__":
find('myFile.txt', '/path/to/one/user/dir/and/subDir1/and/subDir2')

上面的效果很好。

问题1:如何改进我的代码以处理这样的事情:

  find('myFile.txt', '/path/to/one/*/dir/and/*/and/*')

问题2:Pythonic 的方式是什么:

      if file==filename:

最佳答案

关于问题1:

您正在询问一个全局表达式。请注意,您发布的表达式不一定是唯一的,因此它可以匹配多个目录(和文件)。要获取这些文件/目录,您可以使用 glob module

import glob
for result in glob.iglob('/path/to/one/*/dir/and/*/and/*'):
find('myFile.txt', result)

我想您可能想在尝试在其中查找文件之前检查 result 是否是一个目录... (os.path.isdir(result) )

<小时/>

关于问题2:

我认为您可能只是想知道您要查找的文件是否在 in 文件中,然后打印/yield 完整路径:

def find(filename, path):
for root, dirs, files in os.walk(path):
if filename in files:
print(os.path.join(root, filename))

编写 if x == y 并没有什么“不符合 Python 风格的”——这实际上很常见。但是,就您的情况而言,您实际上并不需要这样做。 Pythonic 的事情是使用内置运算符在列表中查找所需的对象,并根据是否找到某些内容简单地构造输出。另外,我在上面暗示过,但产生结果通常比仅仅打印结果更好(并且更可重用):

def find(filename, path):
for root, dirs, files in os.walk(path):
if filename in files:
yield os.path.join(root, filename)

现在,您可以在调用者中打印它(或用它做其他事情......):

for filename in find(needle, haystack):
print(filename)

关于python - os.walk 带通配符的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36324314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com