提问者:小点点

筛选列表以获取每个月的最后一天(列表中的)


我正在使用以下代码搜索特定路径:

path = glob.glob(C:/*/202*, recursive=True)

我得到以下字符串列表作为输出:

C:/some_path\\20200102
C:/some_path\\20200131
C:/some_path\\20200228
C:/some_path\\20200310
C:/some_path\\20200331

最终文件夹表示YYYYMMdd(年-月-日)

我想过滤这个字符串列表,以便只得到列表中月份中最大的一天(日数)。

所需输出:

C:/some_path\\20200131
C:/some_path\\20200228
C:/some_path\\20200331

我试着做:

for i in path:
    filtered = max(path)

但这只检索列表的最后日期。 不是像我想的那样每个月都要。


共2个答案

匿名用户

可能不是最有效的,但你可以这样做。 基本上是使用dictgroupbymax

paths = ['C:/some_path\\20200102',
'C:/some_path\\20200131',
'C:/some_path\\20200228',
'C:/some_path\\20200310',
'C:/some_path\\20200331']

d = {}
for path in paths: 
    d[path[-4:-2]] = d.get(path[-4:-2], []) + [path]

print([max(paths, key=lambda x: x[-2:]) for paths in d.values()])

['C:/some_path\\20200131', 'C:/some_path\\20200228', 'C:/some_path\\20200331']

匿名用户

试试看:

names = ["202001", "202002", "202003","202004","202005","202006","202007",
         "202008", "202009","202010","202011","202012"]
path = []
for name in names:
    for j in range(31,0,-1):
        tmp = glob.glob(f"C:/*/{name}{j}", recursive=True)
        if tmp:
            path.append(tmp)
            break