Python中JSON数据格式、RE正则表达式、Xpath

本文介绍了Python中处理JSON数据的常用方法,包括json包的dumps()和loads()等函数,以及如何读取和写入JSON文件。接着详细讲解了正则表达式的概念、语法和常用函数,如group()、start()和span()等。最后探讨了XPath语言在XML文件中的应用,包括选取节点的方法和XPath工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON

  • JSON:(JavaScriptObjectNotation)

  • 轻量级的数据交换格式,基于ECMAScript

  • json格式是一个键值对形式的数据集

    • key:字符串

    • value:字符串,数字,列表,json

    • json使用大括号包裹

        student={
            "name":"dana",
            "age":18,
            "mobile":110
            }
      
  • json和python格式的对应

    • 字符串:字符串
    • 数字:数字
    • 队列:list
    • 对象:dict
    • 布尔值:布尔值
  • python for json

    • json包
    • 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": "dana",
    "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)
  • 读取json文件
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)

RE正则表达式(RegularExpression, re)

  • 是一个计算机科学的概念
  • 用于使用单个字符串来描述,匹配符合某个规则的字符串
  • 常常用来检索,替换某些模式的文本
  • 写法:
    • .(点号):表示任意一个字符,除了\n, 比如查找所有的一个字符 .

    • *:匹配前面的子表达式任意次

    • [ ]: 匹配中括号中列举的任意字符,比如[L,Y,0] , LLY, Y0, LIU

    • \d: 任意一个数字

    • \D:除了数字都可以

    • \s:表示空格,tab键

    • \S:除了空白符号

    • \w: 单词字符, 就是a-z, A-Z, 0-9, _

    • \W: 除了

    • : 表示前面内容重复零次或者多次, \w

    • +: 表示前面内容至少出现一次

    • ?: 前面才出现的内容零次或者一次

    • {m,n}:允许前面内容出现最少m次,最多n次

    • ^:匹配字符串的开始

    • $:匹配字符串的结尾

    • \b:匹配单词的边界

    • ():对正则表达式内容进行分组, 从第一个括号开始,编号逐渐增大

    • \A: 只匹配字符串开头, \Aabcd, 则abcd

    • \Z: 仅匹配字符串末尾, abcd\Z, abcd

    • |: 左右任意一个

    • (?P…): 分组,除了原来的编号再制定一个别名, (?P12345){2}, 1234512345

    • (?P=name): 引用分组

          验证一个数字: ^\d$
          必须有一个数字,最少一位:^\d+$
          只能出现数字,且位数为5-10位: ^\d{5,10}$
          注册者输入年龄,要求16岁以上,99岁以下: ^[16-99]$
          只能输入英文字符和数字: ^[A-Za-z0-9]$
          验证qq号码: [0-9]{5,12}
      

RE使用步骤

  • 使用compile将表示正则的字符串编译为一个pattern
  • 通过patterm对象提供一系列方法对文本进行查找匹配,获得匹配结果,一个Match对象
  • 最后使用Match对象提供的属性和方法获得信息,根据需要进行操作

RE常用函数

  • group():获得一个或者多个分组匹配的字符串,当要获得整个匹配的字串时,直接使用group或者group(0)
  • start():获取风阻匹配的子串在整个字符串中的起始位置,参数默认为0
  • end():获取分组匹配的子串在整个字符串中的结束位置,默认值为0
  • span():返回的

re.match #从开始位置开始匹配,如果开头没有则无
re.search #搜索整个字符串
re.findall #搜索整个字符串,返回一个list

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

Xpath

  • 在XML文件中查找信息的一套规则/语言,根据XML的元素或者属性进行遍历

Xpath开发工具

  • 开源的XPath表达式边际工具:XMLQuire
  • chrome插件,Xpath Helper
  • Firefox插件:Xpath Checker
选取节点
<?xml version="1.0" encoding="utf-8" ?>
<School>
    <Teacher desc="PythonTeacher" score="good">
        <Name>LiuDana</Name>
        <Age_1 Detail="Age for year 2010">18</Age_1>
        <Mobile>13260446055</Mobile>
    </Teacher>
    <Student>
        <Name Other="他是班长">ZhangSan</Name>      
        <Age Detail="The yongest boy in class">14</Age>
    </Student>      
    <Student>
        <Name>LiSi</Name>
        <Age>19</Age>
        <Mobile>18570876040</Mobile>
    </Student>
    <!-- 这是一个例子而已 -->
</School>
  • nadename:选取此结点的所有子节点

  • /:从根节点开始选

      /Student:没有结果
      /School:选取school节点
    
  • //:选取节点,不考虑位置

      //age:选取处三个节点,一般组成列表返回
    
  • .:点号 选取当前节点

  • . .:双点 选取当前节点的父亲节点

  • @:选取属性

  • Xpath中的查找一般按照路径找

      School/Teather:返回Teacher节点
      School/Student:返回两个Student节点
      //Student:选取所有Student的节点,不考虑位置
      School//Age:选取School后代中所有的Age的节点
      //@Other:选取Other属性
      //Age[@Detail]:选取带有Detail属性的Age元素
    

谓语-Predicates

  • /School/Student[1]:选取School下面的第一个Student节点
  • /School/Student[last()]:选取School下面的最后一个Student节点
  • /School/Student[last()-1]:选取School下面的倒数第二个Student节点
  • /School/Student[position() < 3]: 选取School下面的前二个Student节点
  • //Student[@score]: 选取带有属性score的Student节点
  • //Student[@score=“99”]: 选取带有属性score并且属性值是99的Student节点
  • //Student[@score]/Age: 选取带有属性score的Student节点的子节点Age

Xpath的一些操作

  • | :或者

        //Student[@score] | //Teacher: 选取带有属性score的Student节点和Teahcer节点
    
  • 其余不常见XPath运算符号包括+, - , *, div, >, <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值