过滤并列出特定的文件名 [英] Filter and list specific file names
本文介绍了过滤并列出特定的文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我通过编写以下代码生成了文件列表:
I generated a list of files by writing the following code:
files = [file for file in Path(main_directory).rglob('*filename*v*.xlsx')]
它检索文件列表:
files[0] = .../2018/filename 2018 v 1.xlsx
files[1] = .../2019/filename 2019 v 5.xlsx
files[2] = .../2020/filename 2020 v 4.xlsx
files[3] = .../2020/filename 2020 v 5.xlsx
...
files[13] = .../2020/filename 2020 v 10.xlsx
我该怎么做才能获得每年只给我最大的 v
的输出,所以我会有这样的输出?
What can I do to have an output to give me only the biggest v
for each year, so I will have an output like this?
files[0] = .../2018/filename 2018 v 1.xlsx
files[1] = .../2019/filename 2019 v 5.xlsx
files[2] = .../2020/filename 2020 v 10.xlsx
我必须获得最大的 v
,这并不意味着它具有最新的修改日期,因此我无法使用该功能.我已经尝试过 os.path
和 re
,但是我找不到任何地方.
I have to get the biggest v
which doesn't mean it has the latest modified date, so I can not use that functionality.
I have tried os.path
and re
but I am getting no where.
推荐答案
假设相同年份的文件名在一起,您可以尝试一下.
Assuming that the filenames of same years are together you can try this.
x=["2018/filename 2018 v 1.xlsx","2019/filename 2019 v 5.xlsx","2020/filename 2020 v 4.xlsx","2020/filename 2020 v 5.xlsx","2020/filename 2020 v 10.xlsx"]
from itertools import groupby
import re
for i,j in groupby(x, lambda x:int(re.findall(r"(?<=filename )\d+", x)[0])):
print max(j, key=lambda x:int(re.findall(r"(?<=v )\d+(?=\.xlsx)", x)[0]))
输出:
2018/filename 2018 v 1.xlsx
2019/filename 2019 v 5.xlsx
2020/filename 2020 v 10.xlsx
这篇关于过滤并列出特定的文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文