过滤并列出特定的文件名 [英] Filter and list specific file names

查看:64
本文介绍了过滤并列出特定的文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过编写以下代码生成了文件列表:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆