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

问题描述:

如何找到包含20170423这样的日期的目录的路径?意思是说,它可以是任何日期,但是我想拥有特定的路径,直到我得到一个包含日期的文件夹。沿着这个模式可能有几个子目录,但这是一个特例,我在哪里需要提供更高的精度,例如文件夹的内容以选择合适的文件夹。给它一个镜头,如果你ð喜欢的特殊情况,但在那里我知道,只有一个前进的道路上文件夹中包含该模式的情况下,我开始的方式是:在Python中查找目录中的特定路径

directPaths_list = [f.path for f in os.scandir(start) if f.is_dir() ] 

这给了我所有的路径从开始文件夹到结束。现在,我想返回具有日期模式的路径,特别是一个,我们可以说它的int(folder_name)是< datetime.datetime.today()

我可以想出一个粗略的解决方案,但是SO拥有非常优秀的技术人员,可以提供优雅的解决方案,所以它就是......任何想法?谢谢!

例如,用于路径开始= C:/这将返回C:\用户\ 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是一个相应命名的文件。 然后你可以使用os.walk()

start = "C:\\Users\\abc\\" 

for dirpath, dirnames, filenames in os.walk(start): 
    for filename in filenames: 
     if filename == "20170412": 
      filename = os.path.join(dirpath, filename) 
      print(filename) 
      print(dirpath) 

如果只有一个文件存在C:\Users\abc\def\ghi\20170412然后上面会输出:

C:\Users\abc\def\ghi\20170412 
C:\Users\abc\def\ghi\ 

当然你可以改变if语句,以适应您是否要检查filename.startswith("2017")或其他任何东西。

警告:如果你start = "C:\\"那么这是最有可能会采取looong的时间来完成。因为它要穿过C驱动器上的每个目录。

您同样可以改变for filename in filenames

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"] 
+0

谢谢!但我想要一个目录,我应该只用 '用于dirname中的dirnames' 以及'dirname uniXVanXcel

+1

是的,你也可以同样在'dirnames'中输入dirname。当你找到文件或目录时,父目录将是'dirpath'。 – Vallentin

+0

不错!,对你的评论关于我是否开始在C:\\我实际上可以使用'os.walk(“C:\\ Users \ ...”,topdown = False)自下而上搜索“ – uniXVanXcel