我有一个脚本可以从特定位置获取所有文件。但我需要获取lates文件。 该脚本应该提供该位置的最新文件。
例如。我有一个位置,有一些文件名如下
DataLogs_20141125_AP.CSV
DataLogs_20141125_UK_EARLY.CSV
DataLogs_20141125_CAN.CSV
DataLogs_20141125_US.CSV
DataLogs_20141125_EUR.CSV
DataLogs_20141125_US_2.CSV
DataLogs_20141126_AP.CSV
DataLogs_20141126_UK_EARLY.CSV
DataLogs_20141126_CAN.CSV
DataLogs_20141126_US.CSV
DataLogs_20141126_EUR.CSV
DataLogs_20141126_US_2.CSV
我想获取最新的文件。例如,文件匹配" 20141126"模式是最新的。
我试过匹配,但它给了我所有文件。
filematch ='DataLogs_2014_*.CSV'
答案 0 :(得分:2)
你可以这样做:
从最近的日期开始,获取包含最新日期的所有文件
fileList = ['DataLogs_20141125_AP.CSV', 'DataLogs_20141125_UK_EARLY.CSV', 'DataLogs_20141125_CAN.CSV', 'DataLogs_20141125_US.CSV', 'DataLogs_20141125_EUR.CSV', 'DataLogs_20141125_US_2.CSV', 'DataLogs_20141126_AP.CSV',
'DataLogs_20141126_UK_EARLY.CSV','DataLogs_20141126_CAN.CSV', 'DataLogs_20141126_US.CSV','DataLogs_20141126_EUR.CSV', 'DataLogs_20141126_US_2.CSV']
latest = sorted(map(lambda x:x.split('_')[1],fileList), reverse=True)[1]
print filter(lambda x:x.find(latest)!=-1, fileList)
输出:
['DataLogs_20141126_AP.CSV', 'DataLogs_20141126_UK_EARLY.CSV', 'DataLogs_20141126_CAN.CSV', 'DataLogs_20141126_US.CSV', 'DataLogs_20141126_EUR.CSV', 'DataLogs_20141126_US_2.CSV']
答案 1 :(得分:0)
您可以执行以下操作:
data = """DataLogs_20141125_AP.CSV
DataLogs_20141125_UK_EARLY.CSV
DataLogs_20141125_CAN.CSV
DataLogs_20141125_US.CSV
DataLogs_20141125_EUR.CSV
DataLogs_20141125_US_2.CSV
DataLogs_20141126_AP.CSV
DataLogs_20141126_UK_EARLY.CSV
DataLogs_20141126_CAN.CSV
DataLogs_20141126_US.CSV
DataLogs_20141126_EUR.CSV
DataLogs_20141126_US_2.CSV"""
print(list(fname for fname in data.split() if '20141126' in fname))
给出:
['DataLogs_20141126_AP.CSV', 'DataLogs_20141126_UK_EARLY.CSV', 'DataLogs_20141126_CAN.CSV', 'DataLogs_20141126_US.CSV', 'DataLogs_20141126_EUR.CSV', 'DataLogs_20141126_US_2.CSV']
对于更一般的解决方案,即搜索最新日期的解决方案,您可以按@ user3推荐。
答案 2 :(得分:0)
您还可以使用itertools.groupby
按文件名中的日期对文件进行分组。
from itertools import groupby
file_list = ['DataLogs_20141125_AP.CSV', 'DataLogs_20141125_UK_EARLY.CSV', 'DataLogs_20141125_CAN.CSV', 'DataLogs_20141125_US.CSV', 'DataLogs_20141125_EUR.CSV', 'DataLogs_20141125_US_2.CSV', 'DataLogs_20141126_AP.CSV',
'DataLogs_20141126_UK_EARLY.CSV','DataLogs_20141126_CAN.CSV', 'DataLogs_20141126_US.CSV','DataLogs_20141126_EUR.CSV', 'DataLogs_20141126_US_2.CSV']
def group_key_func(value):
"""Function to pull out and return the key value to group by in the filename"""
return value.split("_")[1] # pulls out '20141126' in 'DataLogs_20141126_CAN.CSV'
newest_date, newest_files = sorted([(group_key, list(group)) for group_key, group in groupby(file_list, key=group_key_func)], reverse=True)[0]
最新日期,文件结果:
20141126:
DataLogs_20141126_AP.CSV
DataLogs_20141126_UK_EARLY.CSV
DataLogs_20141126_CAN.CSV
DataLogs_20141126_US.CSV
DataLogs_20141126_EUR.CSV
DataLogs_20141126_US_2.CSV