簡體   English   中英

如何使用Python獲取目錄中的最新文件夾

[英]How to get the latest folder in a directory using Python

我需要檢索最近創建的文件夾的目錄。 我正在使用一個程序,每次執行時都會輸出一個新的 run## 文件夾(即 run01、run02、run03 等)。 在任何一個run##文件夾中,都有一個我想要分析的數據文件 (file-i-want.txt)。

folder_numb = 'run01'
dir = os.path.dirname(__file__)
filepath = os.path.join(dir, '..\data\directory',run_numb,'file-i-want.txt')

簡而言之,我想跳過必須在run##中進行硬編碼,而只需獲取最近創建的run##文件夾中的文件目錄。

您可以使用os.stat獲取創建日期

path = '/a/b/c'

#newest

newest = max([f for f in os.listdir(path)], key=lambda x: os.stat(os.path.join(path,x)).st_birthtime)

# all files sorted

sorted_files = sorted([f for f in os.listdir(path)],key=lambda x: os.stat(os.path.join(path, x)).st_birthtime, reverse=True)

glob.glob('run*') 將返回與按名稱排序的模式匹配的文件/目錄列表。

所以如果你想要最新的運行你的代碼將是:

import glob
print(glob.glob('run*')[-1])  # raises index error if there are no runs

重要的是,文件按名稱排序,例如,在這種情況下,'run21' 將在 'run100' 之后出現,因此您需要使用足夠多的數字才能看到此錯誤。 或者只是計算匹配文件的數量,然后用這個數字重新創建文件夾的名稱。

您可以使用 glob 檢查具有相同名稱模式的文件數:

import glob
n = len(glob.glob('run*')) # number of files which name starts with 'run'
new_run_name = 'run' + str(n)

注意:使用此代碼,文件名從 0 開始,如果您想從 1 開始,只需將 1 添加到 n。

如果你想要總是兩位數的運行號 (00, 01, 02) 而不是 'str(n)' 使用 'str(n).zfill(2)'

例子:

import glob
n = len(glob.glob('run*')) # number of files which name starts with 'run'
new_run_name = 'run' + str(n + 1).zfill(2)

pathlib是推薦用於文件系統相關任務的os

參考

你可以試試:

filepath = Path(__file__).parent / 'data/directory'
fnames = sorted(list(Path(filepath).rglob('file-i-want.txt')), key=lambda x: Path.stat(x).st_mtime, reverse=True)
filepath = str(fnames[0])
filepath

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM