如何用Python glob按日期读取指定JSON文件
解决按日期批量匹配JSON文件的问题
你的核心问题是glob的通配符写法不对,要结合生成的日期变量来精准匹配对应日期的文件。
修正glob匹配规则
观察你的文件名格式,都是以-日期_任意字符.json开头,所以把原来的'day*.json'替换成带日期变量的通配符即可:
json_files = glob.glob(os.path.join(path_to_json, f'-{day}_*.json'))
这里的f'-{day}_*.json'会生成类似-2022_06_13_*.json的匹配规则,刚好对应你文件名里的日期前缀,*会匹配日期后面的所有字符,最后锁定.json后缀。
完整修正后的代码
另外你的代码还有几个小问题需要调整,比如变量名冲突、dump时变量不一致、手动close多余等,修正后的完整代码如下:
import datetime import pandas as pd import glob import os import json start = datetime.datetime(2022, 8, 25) end = datetime.datetime(2022, 12, 25) datelist = pd.date_range(start, end) path_to_json = r'C:\Users\Admin\INPUT' output_base = r'C:\Users\Admin\OUTPUT\Netflix' # 确保输出目录存在,避免报错 os.makedirs(output_base, exist_ok=True) for a in datelist: day = str(a)[:10].replace('-', '_') # 正确匹配对应日期的JSON文件 json_files = glob.glob(os.path.join(path_to_json, f'-{day}_*.json')) # 如果当天没有文件,直接跳过循环 if not json_files: continue for file_path in json_files: # with语句会自动关闭文件,不需要手动fi.close() with open(file_path, 'r', encoding='utf-8') as fi: # 不要用dict当变量名,这是Python内置类型 data_dict = json.load(fi) # 修改Name字段 data_dict[0]["Name"] = "NETFLIX" # 提取文件名,用os.path.split更跨平台 file_name = os.path.split(file_path)[1] output_url = os.path.join(output_base, file_name) # dump时用修改后的data_dict,不是未定义的data with open(output_url, "w+", encoding='utf-8') as f: json.dump(data_dict, f, indent=4) # 加indent让输出的JSON更易读
关键修改点说明
- 用f-string拼接匹配规则,精准锁定对应日期的文件
- 避免使用
dict作为变量名,防止覆盖Python内置类型 - 移除多余的手动
close(),依赖with上下文管理器自动处理文件关闭 - 修正dump时的变量错误,用修改后的
data_dict替代未定义的data - 添加
os.makedirs确保输出目录存在,避免写入失败 - 用
os.path.split替代rsplit('\\',1),让代码更适配不同操作系统 - 读取和写入时指定
encoding='utf-8',避免中文乱码问题
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

