我有多个文件,按日期顺序排列,格式为YYMMDD_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个列表,每个列表包含每个文件的相关文件一天。
答案 0 :(得分:3)
如何使用字典?以下是我如何做的高级概述。
day
索引的列表中。files = {}
for filename in all_files:
day = filename.split('_')[0][-2:]
files.setdefault(day, []).append(filename)
files
看起来像这样:
{
day1 : [f11, f12, ...],
day2 : [f21, f22, ...],
...
}
请注意,键是字符串,但如果事先将day
投射到int
,它们就可以很容易地成为整数。
答案 1 :(得分:0)
我认为,你应该使用int->这个
的stings列表的dictdef 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
答案 2 :(得分:0)
我要去defaultdict
个列表。 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))
遵循此files_for_date
会将同一天(日期)的文件名分组到由datetime.date
对象键入的列表中。
如果您愿意,可以使用date
或str(date)
将strftime()
对象转换为字符串,例如
files_for_date[date.strftime('%Y%m%d')].append(filename)
将导致格式为YYYYMMDD的字符串键。
答案 3 :(得分:0)
如果您不想手动处理异常(如bissextile年,几个月),您可以解析日期时间:
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日到1/1/2017(365天)的每一天,并获取在给定位置具有该日期的每个文件的列表。 希望它有用