Python 目录中的最新文件

Python newest file in a directory

我正在编写一个脚本,试图列出以 .xls 结尾的最新文件。应该很容易,但我收到了一些错误。

代码:

for file in os.listdir('E:\Downloads'):
    if file.endswith(".xls"):
        print "",file
        newest = max(file , key = os.path.getctime)
        print "Recently modified Docs",newest

错误:

Traceback (most recent call last):
  File "C:\Python27\sele.py", line 49, in <module>
    newest = max(file , key = os.path.getctime)
  File "C:\Python27\lib\genericpath.py", line 72, in getctime
    return os.stat(filename).st_ctime
WindowsError: [Error 2] The system cannot find the file specified: 'u'
newest = max(file , key = os.path.getctime)

这是迭代文件名中的字符而不是文件列表中的字符。

您正在做类似 max("usdfdsf.xls", key = os.path.getctime) 而不是 max(["usdfdsf.xls", ...], key = os.path.getctime)

的事情

你可能想要这样的东西

files = [x for x in os.listdir('E:\Downloads') if x.endswith(".xls")]
newest = max(files , key = os.path.getctime)
print "Recently modified Docs",newest

您可能还想改进脚本,以便在您不在下载目录中时它也能正常工作:

files = [os.path.join('E:\Downloads', x) for x in os.listdir('E:\Downloads') if x.endswith(".xls")]

您可以使用 glob 获取 xls 个文件的列表。

import os
import glob

files = glob.glob('E:\Downloads\*.xls')

print("Recently modified Docs", max(files , key=os.path.getctime))

如果您更喜欢最新的 pathlib 解决方案,这里是:

from pathlib import Path

XLSX_DIR = Path('../../somedir/')
XLSX_PATTERN = r'someprefix*.xlsx'

latest_file = max(XLSX_DIR.glob(XLSX_PATTERN), key=lambda f: f.stat().st_ctime)