簡體   English   中英

如何從python中的文件夾中檢索最新文件

[英]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'

上面顯示的最新文件的名稱。 因此,它正在查找文件,但是可能是問題所在。 請幫忙

  1. 您應該使用os.path.isfile(x)not os.path.isdir(x) os.path.isfile(x)

  2. filter已棄用; 優先考慮列表:

     filelist = [f for f in filelist if os.path.isfile(f)] 
  3. 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.

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