我如何找到包含类似20170423日期的目录的路径?意思是,它可以是任何日期,但是我想拥有那个特定的路径,直到我得到一个包含日期的文件夹。.沿途可能有几个子目录,但这是一种特殊情况,我将需要更精确,例如文件夹的内容才能选择合适的文件夹。如果您喜欢特殊情况,请给它拍摄,但是对于我知道沿途只有一个文件夹包含该模式的情况,我开始的方式是:
directPaths_list = [f.path for f in os.scandir( start ) if f.is_dir() ]
这为我提供了从开始文件夹到末端的所有路径。现在,我想返回具有日期模式的路径,尤其是一个路径,它可以说是谁的int(folder_name(是<dateTime.dateTime.today((
我可以提出一个粗糙的解决方案,但是在提出Succint Elegant Solutions方面具有很好技能的人也是如此,所以这是..有什么想法吗?谢谢!
例如,对于路径开始= 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
是相应命名的文件。然后,您可以使用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:Usersabcdefghi20170412
,则以上将输出:
C:Usersabcdefghi20170412
C:Usersabcdefghi
您当然可以更改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:Usersabcdefghi20170412
实际上是一个目录,则以上将输出与以前相同的输出:
C:Usersabcdefghi20170412
C:Usersabcdefghi
我希望有更简洁的东西
如果您称之为简短的话,您仍然可以将其包装到列表中。
files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"]