在python中按天分组时间戳字符串

在python中按天分组时间戳字符串,python,python-3.x,string,timestamp,Python,Python 3.x,String,Timestamp,我有许多文件,按日期顺序排列,格式为yymmd_hhmmss.txt 我只想根据文件的日期来隔离这些文件 每天会有24个文件,每小时1个。。。我想将每天的所有文件隔离到单独的列表中 day = 1 list_for_a_day = [] for filename in all_files: if '%s' % (day) in filename: list_for_a_day.append(filename) day += 1

我有许多文件,按日期顺序排列,格式为
yymmd_hhmmss.txt
我只想根据文件的日期来隔离这些文件

每天会有24个文件,每小时1个。。。我想将每天的所有文件隔离到单独的列表中

day = 1
list_for_a_day = []

for filename in all_files:
     if '%s' % (day) in filename:
          list_for_a_day.append(filename)
          day += 1
          if day > 31:
             pass

这显然是错误的做法。。如果我有3天的文件,每天有24个文件,那就是72个文件。。。我想要3个列表,每个列表包含每天的相关文件。

使用字典怎么样?这是我如何做的一个高层次的概述

  • 迭代所有文件名
  • 对于每个文件名,提取day属性(我只是使用字符串拆分,假设文件名结构是一致的,这应该可以工作)
  • 将该文件添加到字典中按
    day
    索引的列表中
  • 文件
    的外观如下:

    { 
        day1 : [f11, f12, ...],
        day2 : [f21, f22, ...], 
        ...
    }
    

    请注意,键是字符串,但如果您提前将
    day
    转换为
    int
    ,它们也可以很容易地成为整数

    我认为,你应该使用dict of int->list of stings来完成这个任务

    def sep_file_by_days(filename_list):
    filenames_by_day = dict()
    
    for filename in filename_list:
        day = int(filename[4:6])
    
        if not day in filenames_by_day:
            filenames_by_day[day] = []
    
        filenames_by_day[day].append(filename)
    
    return filenames_by_day
    
    我想要一份清单。dict的关键是日期。这些值将是该日期的文件名列表

    from glob import glob
    from datetime import datetime
    from collections import defaultdict
    
    files_for_date = defaultdict(list)
    
    for filename in glob('*.txt'):
        try:
            date = datetime.strptime(filename, '%Y%m%d_%H%M%S.txt').date()
            files_for_date[date].append(filename)
        except ValueError as exc:
            print('Skipping file {}'.format(filename))
    
    在此之后,日期的
    文件将把同一天(日期)的文件名分组到由
    datetime.date
    对象键入的列表中

    如果愿意,可以使用
    str(date)
    strftime()
    date
    对象转换为字符串,例如

    files_for_date[date.strftime('%Y%m%d')].append(filename)
    

    将产生格式为YYYYMMDD的字符串键。

    如果您不想手动处理异常(如六分之一年,月中的天),您可以通过datetime解析:

    import datetime
    
    fmt = "%02d%02d%02d"
    starting_date = datetime.datetime(year=2016, month=1, day=1)
    for _ in range(365):
       starting_date += datetime.timedelta(days=1)
       list_for_a_day = [filename for filename in all_files if filename[-16:-11] in fmt % (abs(starting_date.year)%100, starting_date.month, starting_date.day)]
    
    通过这种方式,您可以解析从2016年1月1日到2017年1月1日(365天)的每一天,并获得在给定位置具有该日期的每个文件的列表。
    希望这对您有所帮助

    10月1日和12月1日的解决方案也会相同list@gogaz
    我只想根据文件的日期来隔离它们。
    无论如何,在大多数情况下@COLDSPEED解决方案更好
    import datetime
    
    fmt = "%02d%02d%02d"
    starting_date = datetime.datetime(year=2016, month=1, day=1)
    for _ in range(365):
       starting_date += datetime.timedelta(days=1)
       list_for_a_day = [filename for filename in all_files if filename[-16:-11] in fmt % (abs(starting_date.year)%100, starting_date.month, starting_date.day)]