我试图根据我无耻地在此站点上找到的一些 Python 代码来查找目录中最新文件的日期。
def newest_file_in_tree(rootfnewer, extension=".avi"):
return max(
(os.path.join(dirname, filename)
for dirname, dirnames, filenames in os.walk(rootfnewer)
for filename in filenames
if filename.endswith(extension)),
key=lambda fn: os.stat(fn).st_mtime)
这有效,但在空目录上失败。
key=lambda fn: os.stat(fn).st_mtime)
ValueError: max() arg is an empty sequence
我承认我是一个 Python 初学者,最后一行远远超出了我的工资等级。
谁能建议我如何捕获错误并防止函数崩溃?
最佳答案
max
有一个 default
关键字:
m = max([], key=lambda x: abs(x), default='empty...')
print(m) # 'empty...'
如果 iterable 为空,将返回 default
。如果没有 default
,这将引发 ValueError
。
另一种方法是使用 glob
为了列出文件:
import os
from glob import glob
def newest_file_in_tree(rootdir, ext='.avi'):
glob_wildcard = os.path.join(rootdir, '**/*{}'.format(ext))
glob_gen = glob(glob_wildcard, recursive=True)
return max(glob_gen, key=lambda fn: os.stat(fn).st_mtime, default='?')
或使用 pathlib
更简洁:
from pathlib import Path
def newest_file_in_tree(rootpath, ext='.avi'):
return max(Path(rootpath).glob('**/*{}'.format(ext)),
key=lambda pth: pth.stat().st_mtime, default='?')
关于python - 函数在空序列上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44614647/