Python对xml,json,pickle的dump和load操作通用代码

Python对xml,json,pickle的dump和load操作通用代码:
需要的包如图在这里插入图片描述
直接上代码:

# coding=utf-8
from __future__ import print_function
import os,sys
import copy
import traceback
import xlrd , xlwt
# import ConfigParser
import os.path
import json
import xmltodict
import pickle
from collections import OrderedDict, namedtuple

class Data(object):
    encoding = 'utf-8'

    @classmethod
    def dump(cls, obj, fp):
        """
        对象obj转化为字符串,写入路径fp的文件

        :param obj: 待转化的对象
        :param fp: 文件路径 eg: D\1.json
        :return: None
        """
        _, ext = os.path.splitext(fp)
        mode = "wb" if ext == ".pickle" else "w"
        s = cls.dumps(obj, ext)
        with open(fp, mode)as f:
            f.write(s)

    @classmethod
    def dumps(cls, obj, fmt):
        """
        对象转换为字符串
        :param obj: 待转换的对象
        :param fmt: 转换的格式,可选值".xml" ".pickle" ".json"
        :return: 字符串
        """
        if fmt == ".xml":
            s = xmltodict.unparse(obj, indent='' * 2, encoding=cls.encoding, pretty=True)   #若报"TypeError: __init__() got an unexpected keyword argument 'encoding'",请删除encoding=cls.encoding
        elif fmt == ".pickle":
            s = pickle.dumps(obj)
        elif fmt == ".json":
            s = json.dumps(obj, indent=2, encoding=cls.encoding)  #若报"TypeError: __init__() got an unexpected keyword argument 'encoding'",请删除encoding=cls.encoding
        else:
            raise RuntimeError("Unsupported format")
        return s

    @classmethod
    def loads(cls, s, fmt, order=False):
        """
        将字符串s转换成对象,fmt为格式
        :param s: 待转换的字符串
        :param fmt: 格式,可选值".xml" ".pickle" ".json"
        :param order: 是否转成有序字典
        :return: obj
        """
        if fmt == ".xml":
            obj = xmltodict.parse(s, encoding=cls.encoding, dict_constructor=dict if not order else OrderedDict)    #若报"TypeError: __init__() got an unexpected keyword argument 'encoding'",请删除encoding=cls.encoding
        elif fmt == ".pickle":
            obj = pickle.loads(s)
        elif fmt == ".json":
            obj = json.loads(s, encoding=cls.encoding)  #若报"TypeError: __init__() got an unexpected keyword argument 'encoding'",请删除encoding=cls.encoding
        else:
            raise RuntimeError("Unsupported format")
        return obj

    @classmethod
    def load(cls, fp, order=False):
        """
        从文件中读取数据,fp文件路径
        :param fp: 文件路径 eg: D:\1.json
        :param order: 是否转成有序字典
        :return: obj
        """
        _, fmt = os.path.splitext(fp)
        mode = "rb" if fmt == ".pickle" else "r"
        with open(fp, mode) as f:
            s = f.read()
        obj = cls.loads(s, fmt, order=order)
        return obj


data = Data()
obj = "helloworld"
fp = "C:\\Users\\Desktop\\test\\123.json"
data.dump(obj,fp )	#往fp的文件写入obj内容
test = data.load(fp)	#加载fp的文件内容
print(test)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值