使用Python从Location获取最新文件

时间:2014-11-27 04:26:16

标签: python csv fetch

我有一个脚本可以从特定位置获取所有文件。但我需要获取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'

3 个答案:

答案 0 :(得分:2)

你可以这样做:

  1. 通过拆分单个文件名并从反向排序中获取第一个元素来获取最新日期。
  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)
    
  3. 输出:

    ['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