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, >, <