使用pathlib-python进行递归搜索

使用pathlib-python进行递归搜索,python,glob,pathlib,Python,Glob,Pathlib,假设我有这些文件 /home/user/one/two/abc.txt /home/user/one/three/def.txt /home/user/one/four/ghi.txt 我试图使用pathlib模块递归地查找ghi.txt。我试过: p = '/home/user/' f = Path(p).rglob(*i.txt) 但获取文件名的唯一方法是使用列表: file = [str(i) for i in f] 实际上只起作用一次。重新运行上面的命令将返回一个空列表 我决定学习

假设我有这些文件

/home/user/one/two/abc.txt
/home/user/one/three/def.txt
/home/user/one/four/ghi.txt
我试图使用
pathlib
模块递归地查找
ghi.txt
。我试过:

p = '/home/user/'
f = Path(p).rglob(*i.txt)
但获取文件名的唯一方法是使用列表:

file = [str(i) for i in f]
实际上只起作用一次。重新运行上面的命令将返回一个空列表

我决定学习
pathlib
,因为它显然是社区推荐的,但不是:

file = glob.glob(os.path.join(p,'**/*i.txt'),recursive=True) 

要简单得多?

您已经有了解决方案

不确定我是否正确阅读了需求,但我已经发布了带有以下假设的答案

  • PathListPrefix是要在其下搜索的起始路径 所有文件。在您的情况下,它可能是“/home/user”
  • FileName是您要查找的文件的名称。在您的情况下,它是“ghi.txt”
  • 您预计的比赛不会超过一场
  • 必须尝试pathlib模块以外的其他模块。
至于直接的解决方案,我也不确定。然而,下面的解决方案就是我所能想到的使用os模块的解决方案

导入操作系统
PathListPrefix='/home/user/'
文件名='ghi.txt'
def搜索(开始路径、文件名搜索):
root,ext=os.path.splitext(StartingPath)
FileName=os.path.split(根)[1]
如果FileName+ext==FileNameToSearch:
返回真值
返回错误
对于os.walk(PathListPrefix)中的根、目录和文件:
路径=根
对于文件中的每个文件:
SearchPath=os.path.join(路径,每个文件)
Found=搜索(搜索路径,文件名)
如果发现:
打印(路径、文件名)
打破

这段代码肯定比你的代码行多得多。所以它不像你的那样紧凑。

显然你已经找到了两种解决问题的方法,你更喜欢其中一种。您的问题是什么?它只工作一次,大概是因为
rglob()
返回一个生成器,您的理解让它变得精疲力竭
f=tuple(Path(p).rglob(*i.txt))
可以让您在它上面循环多次,如果您出于某种原因需要这样做的话