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)