2017-04-22 91 views
0

如何找到包含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) ] 

回答

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