格式化文件

74 篇文章 2 订阅

结构化文件存储

xml

  • 可扩展的标记语言,用户可以自定义文本标记语言
  • xml描述的是数据本身,暨数据结构和语义
  • html侧重描述web页面的数据,暨页面内容
  • 构成
  1. 处理命令,与文件运行相关的命令,只有一行,内容是声明,version属性代表版本必须要有,encoding也是一样,字体语言
  2. 根元素(一个文件内只有一个根文件,只有一棵树)
  3. 子元素
  4. 属性
  5. 内容:表明标签所存储的信息
  6. 注释:起解释说明的信息
  • 保留字符处理 字符都有特殊含义,xml里面符号可能和实际符号有冲突
  • 实体引用需要转义
  • < < 小于号
  • > > 大于号
  • & & 和
  • ’ ’ 单引号
  • " " 双引号
  • 命名空间
为了防止命名冲突
<student>
        <name>liuyang</name>
        <age>23<age>
</student>
<room>
        <name>2014</name>
        <locarion>123</locarion>
</room>
如果想归并上述两个,就必须给冲突元素加上命名空间
<school xmlns:student="........网址" xmlns:room=".....网址"
        <student:name>liuyang</student:name>
        <age>23<age>
        <room:name>2014</room:name>
        <locarion>123<locarion>
</school>
即可成立

读取

  • SAM:基于事件驱动的API,利用SAX解析文档设计到解析器和事件处理两部分
  • DOM:是同意的编程 接口,大致原理是一个文件经过解析以树形形状保存
    1. 定位浏览xml任何一个节点信息
    2. 一般用etree
from urllib.request import urlopen
from xml.etree.ElementTree import parse

# Download the RSS feed and parse it
u = urlopen('http://planet.python.org/rss20.xml')
doc = parse(u)

# Extract and output tags of interest
for item in doc.iterfind('channel/item'):
    title = item.findtext('title')
    date = item.findtext('pubDate')
    link = item.findtext('link')

    print(title)
    print(date)
    print(link)
    print()

运行上面的代码,输出结果类似这样:

Steve Holden: Python for Data Analysis
Mon, 19 Nov 2012 02:13:51 +0000
http://holdenweb.blogspot.com/2012/11/python-for-data-analysis.html

Vasudev Ram: The Python Data model (for v2 and v3)
Sun, 18 Nov 2012 22:06:47 +0000
http://jugad2.blogspot.com/2012/11/the-python-data-model.html

Python Diary: Been playing around with Object Databases
Sun, 18 Nov 2012 20:40:29 +0000
http://www.pythondiary.com/blog/Nov.18,2012/been-...-object-databases.html

Vasudev Ram: Wakari, Scientific Python in the cloud
Sun, 18 Nov 2012 20:19:41 +0000
http://jugad2.blogspot.com/2012/11/wakari-scientific-python-in-cloud.html

Jesse Jiryu Davis: Toro: synchronization primitives for Tornado coroutines
Sun, 18 Nov 2012 20:17:49 +0000
http://feedproxy.google.com/~r/EmptysquarePython/~3/_DOZT2Kd0hQ/
用法
  • 查看
  1. a.tag:获得子标签的名字
  2. a.text:获得文本内容
  3. attrib:获得a标签下所有属性值
  4. a.findall():反回多个值
  5. a.find():返回一个值
  6. a.iter:定位节点

json

  • 轻量级的数据交互语言,带格式的数据交互
  • 是为js准备的
  • json格式是键值对的数据集
  1. key:字符串
  2. value:字符串,数字,列表,json
  3. 直接用大括号包裹
  • 与python格式对比
  1. 字符串:字符串
  2. 数字:数字
  3. 队列:list
  4. 对象:dict
  5. 布尔值:布尔值
json对Python的操作
  • json.dumps():对数据编码,把python格式转换成json格式
  • json.loads():对数据进行解码,把json换成python格式
python对json的操作
  • json.dump(): 把内容写入文件
  • json.load(): 把json文件内容读入python
import json

# 此时student是一个dict格式内容,不是json
student={
    "name": "luidana",
    "age": 18,
    "mobile":"15578875040"
}

print(type(student))

stu_json = json.dumps(student)
print(type(stu_json))
print("JSON对象:{0}".format(stu_json))

stu_dict = json.loads(stu_json)
print(type(stu_dict))
print(stu_dict)
#将文件来回转换
import json


data = {"name":"hahah", "age":12}


with open("t.json", 'w') as f:
    json.dump(data, f)


with open("t.json", 'r') as f:
    d = json.load( f)
    print(d)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值