Python3:在子目录中搜索文件

Python3:在子目录中搜索文件,python,os.path,Python,Os.path,我正在Mac上使用Pycharm。在下面的脚本中,我正在调用名为dwnld.py的文件上的os.path.isfile函数。它打印出“文件存在”,因为dwnld.py位于脚本的同一目录中(/Users/bobsbanks/PycharmProjects/my scripts)。 如果要将dwnld.py放在不同的位置,如何让下面的代码从/Users/BobbySpanks开始搜索所有子目录以查找dwnld.py?我试着阅读os.pathnotes,但找不到我真正需要的东西。我是Python新手

我正在Mac上使用Pycharm。在下面的脚本中,我正在调用名为
dwnld.py
的文件上的
os.path.isfile
函数。它打印出“文件存在”,因为
dwnld.py
位于脚本的同一目录中(
/Users/bobsbanks/PycharmProjects/my scripts
)。 如果要将
dwnld.py
放在不同的位置,如何让下面的代码从
/Users/BobbySpanks
开始搜索所有子目录以查找
dwnld.py
?我试着阅读
os.path
notes,但找不到我真正需要的东西。我是Python新手

import os.path

File = "dwnld.py"

if os.path.isfile(File):
    print("File exists")
else:
    print("File doesn't exist")
试试这个

import os
File = "dwnld.py"

for root, dirs, files in os.walk('.'):
    for file in files: # loops through directories and files
        if file == File: # compares to your specified conditions
            print ("File exists")

摘自:

类似的内容,使用os.listdir(dir):


这可能适合您:

import os
File = 'dwnld.py'
for root, dirs, files in os.walk('/Users/BobbySpanks/'):  
    if File in files:
        print ("File exists")

os.walk(top,top-down=True,onerror=None,followlinks=False)

产生 通过自上而下遍历目录树,可以查看目录树中的文件名 或者自下而上。对于树中以目录顶部为根的每个目录 (包括top本身),它生成一个3元组(dirpath、dirnames、, 文件名)。

为此,您可以使用:

import glob
import os

pattern = '/Users/BobbySpanks/**/dwnld.py'

for fname in glob.glob(pattern, recursive=True):
    if os.path.isfile(fname):
        print(fname)
未检查
dwnld.py
是否实际为文件的简化版本:

for fname in glob.glob(pattern, recursive=True):
    print(fname)
理论上,它现在可能是一个目录

如果recursive为true,则模式
'**'
将匹配任何文件并为零 一个或多个目录和子目录


1) 缩进,2)您不需要
os.getcwd()
,只需使用
,这是一样的。3)
str.isfile()
不存在。我不知道他们为什么投票否决你,你有我的投票权将
file.isfile(file)
改为
file==file
(为了澄清起见,可能会更改名称。)除此之外,这是规范solution@UriGoren-我给出了我投反对票的三个理由。其中最重要的一点是,他的代码根本不起作用。它生成属性错误:“str”对象没有属性“isfile”@Robᵩ, 解决方案基本上没有问题,patric haugh提到了一个小小的错误,但我认为没有理由阻止一个用户花时间惩罚他,降低他已经很低的声誉。这可能不需要调用
os.path.isfile()
。如果glob返回了它,则文件存在。我认为OP对存在比文件类型更感兴趣。这与有一个这样命名的目录很不一样。
for fname in glob.glob(pattern, recursive=True):
    print(fname)