第10天 | 12天搞定Python,文件操作

bitweaver
• 阅读 1364

在开发系统的过程中,经常会用到XML存储和传输数据,XML是一种用于标记电子文件使其具有结构性的标记语言,在博客中经常会见到。

JSON是一种轻量级的数据交换格式,常被用在后端和前端的数据交互上,如你用Python提供后端WebService数据接口,App在调用这个接口时,收到的数据就是JSON文件。

txt是最常见的一种文件格式 ,主要存文本信息,即为文字信息,现在的操作系统大多使用记事本等程序保存,大多数软件可以查看,如记事本,浏览器等。

10.1 XML文件

XML指可扩展标记语言(eXtensible Markup Language)。由成对标签如<book></book>或闭环标签<book/>组成,最外部标签称为根节点。在根节点里面,可以包含很多子节点,子节点有自己的属性和文本。如下样例:book为根节点,name有自己的属性name,author的文本值为老陈,price为闭环标签。

<book>
<name name="书名">12天搞定Python</name>
<author>老陈</author>
<price price="0.00元" />
</book>

在自带的标准库中,Python提供了大量可以用于处理XML语言的包和工具,经我和同事测试、比较,发现ElementTree模块是最好用的,所有我推荐你也用它来处理XML文件。

1. 创建XML

XML文件,从创建节点(book)开始,之后创建里面的子节点,并对子节点进行属性和内容添加。

import xml.etree.ElementTree as ET

# 创建根节点
book = ET.Element("book")
# 创建子节点,并添加属性和数据
title = ET.SubElement(book, "name")
title.attrib = {"name": "书名"}
title.text = "12天搞定Python"
# 创建子节点,并添加数据
author = ET.SubElement(book, "author")
author.text = "老陈"
price = ET.SubElement(book, "price")
# 创建子节点,并添加数据
price.attrib = {"price": "0.00元"}
# 创建tree对象,写文件
tree = ET.ElementTree(book)
tree.write("book.xml", encoding="UTF-8")

输出结果(book.xml文件)

<book>
<name name="书名">12天搞定Python</name>
<author>老陈</author>
<price price="0.00元" />
</book>

2. 修改XML

修改book.xml文件,新增创建日期,修改name的属性名为arr,价格调整为0.01元。

import xml.etree.ElementTree as ET


tree = ET.parse("book.xml")  # 读取待修改文件
book = tree.getroot()
# 创建新节点并添加为root的子节点
createDate = ET.Element("createDate")
createDate.attrib = {"name": "创建日期"}
createDate.text = "2020-10-01"
book.append(createDate)
# 修改书名的属性
name = book.find("name")
name.attrib = {"name": "arr"}
# 修改价格
price = book.find("price")
price.text = "0.01元"
# 写回原文件
tree.write("book.xml", encoding="UTF-8")

输出结果(book.xml文件)

<book>
<name name="arr">12天搞定Python</name>
<author>老陈</author>
<price price="0.00元">0.01元</price>
<createDate name="创建日期">2020-10-01</createDate>
</book>

3. 删除XML节点

删节点,先找到,再用remove()方法进行删除。

import xml.etree.ElementTree as ET

tree = ET.parse("book.xml")  # 读取待修改文件
book = tree.getroot()
for price in book.findall('price'):
    book.remove(price)

tree.write('book.xml', encoding="UTF-8")

输出结果(book.xml文件)

<book>
<name name="arr">12天搞定Python</name>
<author>老陈</author>
<createDate name="创建日期">2020-10-01</createDate>
</book>
  1. 读取XML

循环读取节点内容,输出不为None的节点。

import xml.etree.ElementTree as ET

tree = ET.parse("book.xml")  # 读取待修改文件
book = tree.getroot()
for node in book.iter():
    if node.text is not None:
        print(node.tag, ":", node.text) 

好了,有关XML文件的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

10.2 JSON文件

JSON文件数据由一系列键值对组成并用逗号隔开和我们学过的字典可进行化互相转换。Python 中可以使用json模块对JSON 数据进行编解码。

1. 创建JSON文件

json.dumps()对字符串数据进行编码, json.dump()对文件数据进行编码。

import json

# 字典转换为JSON对象
book = {
    'name': "12天搞定Python",
    'author': '老陈',
    'price': 0.00
}

# 生成json格式
json_str = json.dumps(book, ensure_ascii=False)
# 写入 JSON 数据
with open('book.json', 'w') as f:
    json.dump(json_str, f)

输出结果(book.json文件内容)

"{"name": "12天搞定Python", "author": "老陈", "price": 0.0}"

2. 读取JSON文件

json.loads()对字符串数据进行解码, json.load() 对JSON文件进行解码。
......

我实在拷贝不动了,12天搞定Python,明天就完结了,接下来,我将发布《16天搞定Python数据分析和爬虫》,需要的朋友,可以去看一看。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(