说我有这些文件
/home/user/one/two/abc.txt
/home/user/one/three/def.txt
/home/user/one/four/ghi.txt
我正在尝试使用ghi.txt
模块递归地找到pathlib
。我尝试过:
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)
更直接吗?
您已经有了解决方案。
不确定我是否正确阅读了要求,但是我已经按照以下假设发布了答案。
就直接解决方案而言,我也不确定。但是下面的解决方案是我想到的使用os模块的方法。
import os
PathListPrefix = '/home/user/'
FileName = 'ghi.txt'
def Search(StartingPath, FileNameToSearch):
root, ext = os.path.splitext(StartingPath)
FileName = os.path.split(root)[1]
if FileName+ext == FileNameToSearch:
return True
return False
for root, dirs, files in os.walk(PathListPrefix):
Path = root
for eachfile in files:
SearchPath = os.path.join(Path,eachfile)
Found = Search(SearchPath, FileName)
if Found:
print(Path, FileName)
break
该代码肯定比您的行多得多。因此它不像您的紧凑。