在Python中查找目录中的特定路径

在Python中查找目录中的特定路径,python,path,subdirectory,os.system,scandir,Python,Path,Subdirectory,Os.system,Scandir,我怎样才能找到包含类似20170423的日期的目录路径?也就是说,它可以是任何日期,但我希望有一个特定的路径,直到我得到一个包含日期的文件夹。。沿途可能有几个包含该模式的子目录,但这是一个特殊情况,我需要提供更高的精度,比如文件夹的内容来选择合适的子目录。如果您想在特殊情况下试一试,但对于我知道沿途只有一个文件夹包含该模式的情况,我的开始方式是: directPaths_list = [f.path for f in os.scandir( start ) if f.is_dir()

我怎样才能找到包含类似20170423的日期的目录路径?也就是说,它可以是任何日期,但我希望有一个特定的路径,直到我得到一个包含日期的文件夹。。沿途可能有几个包含该模式的子目录,但这是一个特殊情况,我需要提供更高的精度,比如文件夹的内容来选择合适的子目录。如果您想在特殊情况下试一试,但对于我知道沿途只有一个文件夹包含该模式的情况,我的开始方式是:

 directPaths_list  =  [f.path for f in os.scandir( start ) if f.is_dir()   ] 
这提供了从开始文件夹到结束的所有路径。现在,我想返回其中包含日期模式的路径,特别是一个,比如说其int(folder_name)是 我可以提出一个粗略的解决方案,但是有非常擅长提出简洁优雅的解决方案的人也是如此,所以。。有什么想法吗?谢谢

例如,对于路径start=C:,这将返回C:\Users\abc\def\ghi\20170412

我在想这样的事情可以奏效:

[f.path for f in os.scandir('C:\\Users\\abc\\def\\ghi\\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ] 

假设日期
20170423
是相应命名的文件。 然后你可以使用:

如果只有一个文件存在
C:\Users\abc\def\ghi\20170412
,则上述文件将输出:

C:\Users\abc\def\ghi\20170412
C:\Users\abc\def\ghi\
当然,您可以更改if语句,以适应是否要检查
filename.startswith(“2017”)
或任何其他内容

警告:如果执行
start=“C:\\”
操作,则很可能需要很长时间才能完成。因为它将在C驱动器上的每个目录中运行

您可以同样更改文件名中文件名的

for dirname in dirnames:
    if dirname == "20170412":
        dirname = os.path.join(dirpath, dirname )
        print(dirname)
        print(dirpath)
因此,如果
C:\Users\abc\def\ghi\20170412
实际上是一个目录,那么上面的输出将与前面相同:

C:\Users\abc\def\ghi\20170412
C:\Users\abc\def\ghi\
我希望有更简洁的东西

如果你称之为更简短的话,你仍然可以把它打包成一个列表

files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"]

假设日期
20170423
是相应命名的文件。 然后你可以使用:

如果只有一个文件存在
C:\Users\abc\def\ghi\20170412
,则上述文件将输出:

C:\Users\abc\def\ghi\20170412
C:\Users\abc\def\ghi\
当然,您可以更改if语句,以适应是否要检查
filename.startswith(“2017”)
或任何其他内容

警告:如果执行
start=“C:\\”
操作,则很可能需要很长时间才能完成。因为它将在C驱动器上的每个目录中运行

您可以同样更改文件名中文件名的

for dirname in dirnames:
    if dirname == "20170412":
        dirname = os.path.join(dirpath, dirname )
        print(dirname)
        print(dirpath)
因此,如果
C:\Users\abc\def\ghi\20170412
实际上是一个目录,那么上面的输出将与前面相同:

C:\Users\abc\def\ghi\20170412
C:\Users\abc\def\ghi\
我希望有更简洁的东西

如果你称之为更简短的话,你仍然可以把它打包成一个列表

files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"]

谢谢但是我想要一个目录,我是否应该在dirnames中为dirname使用
以及
dirname使用您的解决方案?是的,您也可以在dirnames
中为dirname使用
。找到文件或目录后,父目录将是
dirpath
。很好!,关于我是否从C:\\开始的评论,我实际上可以使用
os.walk(“C:\\\Users\…”,top-down=False)进行自下而上的搜索。
是的,你确实可以。然而,如果你从C:\,开始,它仍然需要很长时间。我已经说它相当简洁了。但是,如果你想要的话,你仍然可以列一个理解列表(将其添加到答案中)。我真的不知道你说的“不容易出错”是什么意思。如果您需要的话,您可以随时使用函数
按名称(开始,名称)
查找文件。谢谢!但是我想要一个目录,我是否应该在dirnames
中为dirname使用
以及
dirname使用您的解决方案?是的,您也可以在dirnames
中为dirname使用
。找到文件或目录后,父目录将是
dirpath
。很好!,关于我是否从C:\\开始的评论,我实际上可以使用
os.walk(“C:\\\Users\…”,top-down=False)进行自下而上的搜索。
是的,你确实可以。然而,如果你从C:\,开始,它仍然需要很长时间。我已经说它相当简洁了。但是,如果你想要的话,你仍然可以列一个理解列表(将其添加到答案中)。我真的不知道你说的“不容易出错”是什么意思。如果您需要的话,您可以随时创建一个函数
find\u files\u by\u name(start,name)