在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
索引的列表中文件
的外观如下:
{
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)]