我正在使用以下代码搜索特定路径:
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)
但这只检索列表的最后日期。 不是像我想的那样每个月都要。
可能不是最有效的,但你可以这样做。 基本上是使用dict
的groupby
和max
。
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