[英]how to retrieve the most recent file from a folder in python
我正在嘗試檢索目錄中添加或修改的最新文件。 我在其中一個論壇上獲得的代碼使用以下方法:
import os
filelist = os.listdir('MYDIRECTORY')
filelist = filter(lambda x: not os.path.isdir(x), filelist)
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
我把目錄放在那里,它給了我以下錯誤:
Traceback (most recent call last):
File "test.py", line 8, in <module>
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
File "test.py", line 8, in <lambda>
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
OSError: [Errno 2] No such file or directory: 'NAME OF FILE'
上面顯示的最新文件的名稱。 因此,它正在查找文件,但是可能是問題所在。 請幫忙
您應該使用os.path.isfile(x)
而not os.path.isdir(x)
os.path.isfile(x)
。
filter
已棄用; 優先考慮列表:
filelist = [f for f in filelist if os.path.isfile(f)]
os.listdir
僅提供目錄中項目的名稱,而不是完整路徑。 要獲取完整路徑,您需要執行os.path.join('MYDIRECTORY', f)
。
因此,所有修復的問題都應如下所示:
import os
rootpath = 'MYDIRECTORY'
filelist = [os.path.join(rootpath, f) for f in os.listdir(rootpath)]
filelist = [f for f in filelist if os.path.isfile(f)]
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
os.listdir()
在返回的路徑中不包括您列出的目錄。 因此,您必須在調用os.stat(x)
之前將os.chdir("MYDIRECTORY")
放入其中,或者在目錄名前加上os.stat("MYDIRECTORY/" + x)
。
或預先chdir
進入目錄, listdir
在當前目錄中使用listdir
,例如os.listdir(".")
。
問題是os.listdir
返回文件名 ,而不是路徑 。 似乎下一個命令(在os.path.isdir
過濾)僅給出名稱即可工作,但應注意,當不存在具有該名稱的對象時, isdir
返回False
。
您需要做的是將路徑與文件名結合起來:
import os
dirname = 'MYDIRECTORY'
filenames = os.listdir(dirname)
filepaths = [os.path.join(dirname, filename) for filename in filenames]
files = [f for f in filepaths if not os.path.isdir(f)]
newest = max(files, key=lambda x: os.stat(x).st_mtime)
請注意,我用列表推導替換了filter調用。 這被認為更像“ Pythonic”(eww),但我這樣做是因為列表理解通常比Python中的過濾器/映射更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.