文章目录
本篇博文中的模块作用均为跨语言做数据交互,而 json库最重要,因为它可以对任何语言做数据交互。
一、json
1、json 和 Python 的数据类型对照
1、dumps() 和 loads() 方法
dumps() 的作用:序列化,将obj
序列化为json格式str
(1)所有字符串外面的单引号都变成双引号
(2)所有变量都变为字符串
loads()
(1)反序列化
(2)解析数据的规则:字符串必须是双引号才能解析成Python的数据类型
import json
dic = {'name':'CTRao','age':18}
dics= json.dumps(dic)
print(dics,type(dics)) # {"name": "CTRao", "age": 18} <class 'str'>
with open("new","w",encoding="utf-8") as fw:
fw.write(dics)
with open("new","r",encoding="utf-8") as fr:
data = json.loads(fr.read())
print(data["age"],type(data)) # 18 <class 'dict'>
2、dump() 和 load() 方法
与dumps() 和 loads() 方法类似,但是只能操作文件对象。
import json
dic = {'name':'CTRao','age':18}
with open("new","w",encoding="utf-8") as fw:
json.dump(dic,fw)
''' 等效于 dics= json.dumps(dic)
fw.write(dics)
'''
with open("new","r",encoding="utf-8") as fr:
data = json.load(fr) # 等效于data = json.loads(fr.read())
print(data["age"],type(data)) # 18 <class 'dict'>
二、pickle
pickle支持的数据类型更多。方法与json类似。另外,pickle.dumps() 序列化后,返回的数据类型为字节型。
import pickle
dic = {'name':'CTRao','age':18}
dics= pickle.dumps(dic)
print(type(dics)) # <class 'bytes'>
with open("new2","wb") as fw:
fw.write(dics)
with open("new2","rb") as fr:
data = pickle.loads(fr.read())
print(data["age"],type(data)) # 18 <class 'dict'>
三、shelve
shelve比pickle简单,只有一个open方法,返回类似字典的对象,可读可写。key必须为字符串,value可以是Python所支持的数据类型。
import shelve
f = shelve.open("new")
f["age"] = 18
print(f.get("age")) # 18
f.close()
四、xml
xml和json差不多,比json更早使用,所以也很重要。
1、读取xml文件,并获取根结点
import xml.etree.ElementTree as ET
tree = ET.parse("Fxml")
root = tree.getroot()
2、 遍历根节点的子结点和孙子结点
#遍历根结点的子结点
for i in root:
print(i.tag) # 获取标签名
print(i.attrib) # 获取属性,得到一个字典
# 遍历根结点的孙子结点
for j in i:
print(j.tag) # 获取标签名
print(j.attrib) # 获取属性,得到一个字典
print(j.text) #获取内容值
3、iter() 方法
创造一个树迭代器,遍历该结点的子孙,返回具有匹配标记的所有元素。
for child in root.iter("year"):
print(child.tag, child.attrib,child.text)
4、findall() 方法
遍历子结点,返回按文档顺序包含所有匹配元素。
for child in root.findall("country"):
print(child.tag, child.attrib)
5、find() 方法
返回第一个匹配的子结点
print(root.find("country").tag)
6、修改
for node in root.iter("year"):
new_year = int(node.text) + 10
node.text = str(new_year)
node.set("update","yes") # 增加year标签的属性
tree.write("Fxml") # 从内存中,写进文件里
7、删除
for node in root.findall("country"):
rank = int(node.find("rank").text)
if rank > 50:
root.remove(node)
tree.write("Fxml") # 从内存中,写进文件里
8、创建
import xml.etree.ElementTree as ET
new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"})
age = ET.SubElement(name, "age", attrib={"checked": "no"})
sex = ET.SubElement(name, "sex")
sex.text = '33'
name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
age = ET.SubElement(name2, "age")
age.text = '19'
et = ET.ElementTree(new_xml) # 生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True)
ET.dump(new_xml) # 打印生成的格式