如何在JSON文件中匹配指定日期加任意时间并统计活动类型
解决JSON文件中按日期统计活动数量的问题
嘿,我明白你的困扰了——你已经能搞定字符串场景的匹配,但到JSON里按日期(忽略具体时间)统计活动数量就卡壳了对吧?咱们一步步来解决这个问题。
首先,你原来的fnmatch用法有问题:fnmatch.filter()是用来过滤列表的,不是用来检查单个字符串是否匹配模式的,这就是为什么你没得到结果。咱们换正确的方式来实现。
方案1:直接截取日期(最高效,适合固定格式)
既然你的DateTime字段格式是DD/MM/YYYY HH:MM,那日期部分刚好是前10个字符,直接截取就行,简单又高效:
from collections import Counter import json with open('dataset_3.json', 'r') as json_file: json_data = json.load(json_file) # 初始化一个字典,用来存每个日期对应的活动统计 date_activity_stats = {} for item in json_data: # 提取日期部分(前10位) current_date = item['DateTime'][:10] current_activity = item['Activity'] # 如果这个日期还没统计过,就新建一个Counter if current_date not in date_activity_stats: date_activity_stats[current_date] = Counter() # 给对应的活动计数+1 date_activity_stats[current_date][current_activity] += 1 # 打印所有日期的统计结果 for date, stats in date_activity_stats.items(): print(f"📅 日期: {date}") print(stats) print("------------------------")
方案2:用fnmatch正确匹配(适合通配符场景)
如果一定要用fnmatch,得用fnmatch.fnmatch()来检查单个字符串是否符合日期 + 空格 + 任意时间的模式:
from collections import Counter import json import fnmatch with open('dataset_3.json', 'r') as json_file: json_data = json.load(json_file) # 指定你要统计的目标日期 target_date = '18/02/2019' # 用fnmatch匹配以目标日期开头、后面跟空格和任意内容的字符串 activity_counter = Counter( item['Activity'] for item in json_data if fnmatch.fnmatch(item['DateTime'], f"{target_date} *") ) print(f"日期 {target_date} 的活动统计:") print(activity_counter)
方案3:正则表达式(适合灵活格式)
如果你的日期格式可能有变化(比如分隔符不同、位数不固定),用正则表达式会更灵活:
from collections import Counter import json import re with open('dataset_3.json', 'r') as json_file: json_data = json.load(json_file) target_date = '18/02/2019' # 编译正则:以目标日期开头,后面跟一个空格(转义特殊字符避免出错) date_pattern = re.compile(f"^{re.escape(target_date)} ") activity_counter = Counter( item['Activity'] for item in json_data if date_pattern.match(item['DateTime']) ) print(f"日期 {target_date} 的活动统计:") print(activity_counter)
选哪个方案?
- 如果
DateTime格式完全固定(都是DD/MM/YYYY HH:MM),方案1是最优解,速度最快,代码也最直观。 - 如果需要简单的通配符匹配,比如匹配某月份的所有日期(比如
*/02/2019 *),用方案2。 - 如果日期格式不固定,或者需要更复杂的匹配逻辑,用方案3。
内容的提问来源于stack exchange,提问作者Bat
相关产品推荐
相关产品推荐

