python之json文件操作

    由于经常要对一个json格式的文件进行操作,编辑文本比较麻烦,想了想写个脚本对其文件操作,将修改文件直接发送到邮箱里

    文件目录如下:

drwxr-xr-x 2 root root 4096 12月 29 16:14 backup
-rw-r--r-- 1 root root  168 12月 29 16:10 config.ini
-rwx------ 1 root root 2106 12月 29 16:13 email_server.py
drwxr-xr-x 2 root root 4096 12月 29 10:16 log
-rw-r--r-- 1 root root  454 12月 29 16:14 shadowsocks.json
-rwx------ 1 root root 2857 12月 29 16:08 shadowsocks.py
    大概解释下backup里存放每次操作之前的json文本,作为备份,log文件存放操作日志,email作为邮件发送,config作为配置文件,存放数据信息

    操作的json格式如下:

{
    "_comment": {
        "40001": "xiaoming",
        "40009": "xiaohong",
        "40010": "1",
        "40011": "test"
    },
    "method": "aes-256-cfb",
    "port_password": {
        "40001": "password10",
        "40009": "SDSFS#X09",
        "40010": "pQW26hBYMyNnLgm1",
        "40011": "k9nYaRNF7GlW2ejE"
    },
    "server": "XXXXXXXX",
    "timeout": 600
}
    每次在comment和password中插入数据,逻辑:假设新增test这个用户,在comment中取出健,并进行排序,找出最大的40010,自动增1,生成“40011:test”这条数据,生成一个随机密码,在password中插入“40011:*****”这条数据,将新增信息发送至邮箱。

shadowsocks.py源码:

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import subprocess
import os
import commands
import json
import random
import string
from email_server import main
import shutil
import time
import ConfigParser

conf = ConfigParser.ConfigParser()
conf.read('config.ini')
file_path = conf.get("backup", "file_path")
backup_path= conf.get("backup", "backup_path")

def open_json(option,user):
    with open(file_path,'r') as load_f:
        try:
            load_dict = json.load(load_f)
            if(option == "-a"):
                if user in load_dict['_comment'].values():
                    print "用户名已存在!"
                    return -1
                else:
                    return add_user(load_dict,user)
            elif(option == "-d"):
                if user in load_dict['_comment'].values():
                    return delete_user(load_dict,user)
                else:
                    print "用户名不存在!"
                    return -1
            else:
                print "可使用参数\n    -a  添加用户\n    -d  删除用户"
                return -1
        finally:
            load_f.close( )
'''删除用户'''
def delete_user(load_dict,user):
    keys = [x[0] for x in load_dict['_comment'].items() if user in x[1]]
    print keys
    for n in keys:
        del load_dict['_comment'][n]
        del load_dict['port_password'][n]
    print "用户名已删除!"
    return load_dict

'''加载用户'''
def add_user(load_dict,user):
    items = load_dict['port_password'].items()
    items.sort()
    new_port = (int(items[len(items)-1][0])) + 1
    salt = ''.join(random.sample(string.ascii_letters + string.digits, 16))
    dict1={new_port : salt}
    dict2={new_port : user}
    load_dict['port_password'].update(dict1)
    load_dict['_comment'].update(dict2)
    print "用户名已加载!"
    main(user,salt,new_port)
    return load_dict
'''重新加载json文件'''
def write_json(load_dict):
    with open(file_path,"w") as dump_f:
        try:
            json.dump(load_dict,dump_f,sort_keys=True,indent=4)
        finally:
            dump_f.close()
def email_send():
    '''pass'''

if __name__ == "__main__":
    log_time=time.strftime("%Y%m%d%H%M%S", time.localtime())
    shutil.copyfile(file_path,backup_path + log_time)
    if len(sys.argv) < 3:
        print "用法:python shadowsocks.py [-options] username\n[-option]:\n    -a  添加用户\n    -d  删除用户"
        sys.exit()
    option = sys.argv[1]
    name = sys.argv[2]
    if(name != ""):
        load_dict = open_json(option,name)
        if load_dict != -1 and load_dict !="" :
           write_json(load_dict)
        else:
           print "失败"
    else:
        print "用法:python shadowsocks.py [-options] username\n[-option]:\n    -a  添加用户\n    -d  删除用户"
config.ini配置文件:

[backup]
file_path=shadowsocks.json
backup_path =backup/shadowsocks.json
[email]
mail_host=smtp.***.com
mail_user=*****
mail_pass=*****
mail_postfix=****
邮件服务就不贴了,网上很多,最后效果如图:



猜你喜欢

转载自blog.csdn.net/qq_36464836/article/details/78964688
今日推荐