您的位置:首页 > 财经 > 金融 > json配置文件读入redis - 包含命令行解析示例

json配置文件读入redis - 包含命令行解析示例

2025/2/23 7:33:08 来源:https://blog.csdn.net/twicave/article/details/141030759  浏览:    关键词:json配置文件读入redis - 包含命令行解析示例

需要的取用,也是笔记,python argv经常会需要解析。类linux的命令行参数处理,这也是一个示例。 

1.源码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 获取当前脚本文件所在目录的父目录,并构建相对路径
import os
import sys
import json
import redis
import argparse
current_dir = os.path.dirname(os.path.abspath(__file__))
project_path = os.path.join(current_dir, '..')
sys.path.append(project_path)
sys.path.append(current_dir)def load_json_from_file(file_path):# 打开文件并读取内容with open(file_path, 'r', encoding='utf-8') as file:json_str = file.read()# 将 JSON 字符串解析为 Python 对象data = json.loads(json_str)return datadef json2redis(data, root_name='cfg', redis_host='localhost', redis_port=6379):# 连接到 Redis 服务器r = redis.Redis(host='localhost', port=6379, decode_responses=True)# 定义一个递归函数来遍历数据并存储到 Redisdef store_in_redis(prefix, data):if isinstance(data, dict):for key, value in data.items():new_key = f"{prefix}:{key}"store_in_redis(new_key, value)elif isinstance(data, list):for index, item in enumerate(data):new_key = f"{prefix}:{index}"store_in_redis(new_key, item)else:r.set(prefix, data)# 调用函数,传入根键名store_in_redis(f"{root_name}", data)# 示例:从 Redis 获取存储的数据并打印for key in r.keys(f"{root_name}:*"):print(f"{key}: {r.get(key)}")def main():# 创建 ArgumentParser 对象parser = argparse.ArgumentParser(description='处理文件和选项')# 添加参数parser.add_argument('jsonfile', type=str, help='json_file_name')parser.add_argument('--redis_ip', type=str, default='127.0.0.1', help='redis server ip')parser.add_argument('--redis_port', type=int, default=6379, help='redis server port')parser.add_argument('--verbose', action='store_true', help='启用详细模式')# 解析命令行参数args = parser.parse_args()# 使用参数print(f'输入文件: {args.jsonfile}')print(f'输出文件: {args.redis_ip}')print(f'处理次数: {args.redis_port}')print(f'详细模式: {"启用" if args.verbose else "禁用"}')json_obj = load_json_from_file(args.jsonfile)filename_without_ext, _ = os.path.splitext(args.jsonfile)root = filename_without_extroot = root.replace("/", ":")root = root.replace("\\", ":")print(root)json2redis(json_obj, root, args.redis_ip, args.redis_port)if __name__ == '__main__':main()

2.命令行

root@debian-ai:~/json2redis_test# python3 ./gpjson2redis.py                              
usage: gpjson2redis.py [-h] [--redis_ip REDIS_IP] [--redis_port REDIS_PORT] [--verbose] jsonfile

3.运行示例

:home:app:cfg:kde_ai_cfg:app:chDesc:2:video_stream_out: rtsp://127.0.0.1:8554/ch3
:home:app:cfg:kde_ai_cfg:hardware:ip:1:mode: static
:home:app:cfg:kde_ai_cfg:app:chDesc:1:classes_prefered:0: 0
:home:app:cfg:kde_ai_cfg:endpoint:aux:mqtt:0:server: 47.114.51.90
:home:app:cfg:kde_ai_cfg:hardware:ip:0:gateway: 192.168.0.1

 3.1 redis客户端的显示

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com