我试图根据我在本网站上无耻地发现的一些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)
Run Code Online (Sandbox Code Playgroud)
这可行,但在空目录上失败.
key=lambda fn: os.stat(fn).st_mtime)
ValueError: max() arg is an empty sequence
Run Code Online (Sandbox Code Playgroud)
我承认我是一名Python初学者,最后一行超出了我的薪水等级.
任何人都可以建议我如何捕获错误并防止功能崩溃?
max有一个default关键字:
m = max([], key=lambda x: abs(x), default='empty...')
print(m) # 'empty...'
Run Code Online (Sandbox Code Playgroud)
default如果iterable为空,将返回.没有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='?')
Run Code Online (Sandbox Code Playgroud)
或者更简洁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='?')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |