读取文件名包含 python 中的字符串的最新文件
Read latest file with a filename contains string in python
假设我有一个这样的文件列表:
- abc_name.txt
- def_name.txt
- ghj_name.txt
- abcdefghj.txt
- xyz.txt
我知道如何使用 max(list_of_files, key=os.path.getmtime)
读取最新文件,但它可能是任何最后创建的文件。
我想读取名称中包含 'name' 且该文件是上次创建的文件(例如“def_name.txt”)。
我如何在 python 中做到这一点?
非常感谢。
您可以使用 os.glob(pattern)
获取与模式匹配的文件列表,其中模式是 unix-style shell 模式。在您的情况下,它将是 '*name*'
.
获得此列表后,您可以使用 max
功能选择最新的列表。
可以找到关于 glob
的文档 here。
您的代码是正确的。您可以使用 max(list_of_files, key=os.path.getmtime)
。您将需要一个文件列表。要获取文件列表,
做这样的事情:
max([file for file in list_of_files if 'name' in file], key=os.path.getmtime)
假设你运行一个bash
命令:
$ ch /tmp
$ touch abc_name.txt def_name.txt ghj_name.txt abcdefghj.txt xyz.txt
从 Python 开始,您可以使用 pathlib 对文件所在的目录进行 glob,并精确控制要测试的时间元素。
from pathlib import Path
p=Path('/tmp')
max([fn for fn in p.glob('*.txt') if 'name' in str(fn)], key=lambda f: f.stat().st_mtime)
# /tmp/ghj_name.txt
您还可以更改 glob,以便仅返回包含 name
的文件:
max([fn for fn in p.glob('*name*.txt')], key=lambda f: f.stat().st_mtime)
# same result
假设我有一个这样的文件列表:
- abc_name.txt
- def_name.txt
- ghj_name.txt
- abcdefghj.txt
- xyz.txt
我知道如何使用 max(list_of_files, key=os.path.getmtime)
读取最新文件,但它可能是任何最后创建的文件。
我想读取名称中包含 'name' 且该文件是上次创建的文件(例如“def_name.txt”)。
我如何在 python 中做到这一点?
非常感谢。
您可以使用 os.glob(pattern)
获取与模式匹配的文件列表,其中模式是 unix-style shell 模式。在您的情况下,它将是 '*name*'
.
获得此列表后,您可以使用 max
功能选择最新的列表。
可以找到关于 glob
的文档 here。
您的代码是正确的。您可以使用 max(list_of_files, key=os.path.getmtime)
。您将需要一个文件列表。要获取文件列表,
做这样的事情:
max([file for file in list_of_files if 'name' in file], key=os.path.getmtime)
假设你运行一个bash
命令:
$ ch /tmp
$ touch abc_name.txt def_name.txt ghj_name.txt abcdefghj.txt xyz.txt
从 Python 开始,您可以使用 pathlib 对文件所在的目录进行 glob,并精确控制要测试的时间元素。
from pathlib import Path
p=Path('/tmp')
max([fn for fn in p.glob('*.txt') if 'name' in str(fn)], key=lambda f: f.stat().st_mtime)
# /tmp/ghj_name.txt
您还可以更改 glob,以便仅返回包含 name
的文件:
max([fn for fn in p.glob('*name*.txt')], key=lambda f: f.stat().st_mtime)
# same result