在目录列表中获取每个唯一文件名的最新带日期文件名的逻辑
3 个回答
-2
假设你的文件格式总是和下面展示的一样:
files = [
"AE_DIFX_20240320.zip",
"AE_DIFX_20240321.zip",
"AE_DIFX_20240322.zip"
"AE_BATY_20240314.zip",
"AE_BATY_20240315.zip",
"AE_BATY_20240316.zip"
]
results = {}
for file in files:
key, date = file[0:7], int(file[8:16])
if key not in results: results[key] = [date]
else: results[key].append(date)
for key in results:
print(key + '_' + str(max(results[key])) + '.zip')
那么输出结果会像下面这样:
AE_DIFX_20240322.zip
AE_BATY_20240316.zip
我假设你知道怎么获取文件列表(os.listdir)
0
编辑: 我之前的代码逻辑可能会让人感到困惑,所以我简化了代码。现在只要看看我代码里的注释,就能很容易理解逻辑。
files = [
'AE_DIFX_20240320.zip',
'AE_DIFX_20240321.zip',
'AE_DIFX_20240322.zip',
'US_BATY_20240314.zip',
'US_BATY_20240315.zip',
'US_BATY_20240316.zip',
'ZW_XZIM_20240320.zip',
'ZW_XZIM_20240321.zip',
'ZW_XZIM_20240322.zip']
# create a list containing first 8 characters of each file
l = [x[:8] for x in files]
# Remove duplicates by converting into set
l = set(l)
dct = {}
# Iterate thru list l
for x in l:
# create an empty sub list
sub = []
# iterate over files
for y in files:
# to make lists of files containing same prefixes
if x in y:
sub.append(y[8:16])
dct[x] = sub
# now the dct's keys are unique prefixes. values are lists of numbers with specific prefix
# But we want only the largest of numbers for each prefix(latest date)
#concatenate key, max(value) and .zip
ls = [f'{k}{max(v)}.zip' for k, v in dct.items()]
# Sort
ls = sorted(ls)
print(ls)
# Output: ['AE_DIFX_20240322.zip', 'US_BATY_20240316.zip', 'ZW_XZIM_20240322.zip']
0
创建一个字典。字典的键是每个文件名的前8个字符。与这些键相关联的值是一个列表,列表中的内容是每个文件名剩下的字符,也就是从第9个字符开始的部分。接下来,你可以遍历这个字典中的每一项,并对每个值(列表)进行排序,这样就能找出你感兴趣的内容。
from collections import defaultdict
files = [
"AE_DIFX_20240320.zip",
"AE_DIFX_20240321.zip",
"AE_DIFX_20240322.zip",
"AE_BATY_20240314.zip",
"AE_BATY_20240315.zip",
"AE_BATY_20240316.zip",
"ZW_XZIM_20240320.zip",
"ZW_XZIM_20240321.zip",
"ZW_XZIM_20240322.zip"
]
d = defaultdict(list)
for file in files:
d[file[:8]].append(file[8:])
print(*[k + sorted(v)[-1] for k, v in d.items()], sep="\n")
输出:
AE_DIFX_20240322.zip
AE_BATY_20240316.zip
ZW_XZIM_20240322.zip