三、python-json、正则
一、json
1、导入模块
import json
2、常用方法
dumps:序列化,把一个Python对象转化成json字符串
loads:反序列化,把json字符串转化成python
dump:序列化,把一个Python对象转化成json字符串(针对文件使用)
load:反序列化,把json字符串转化成python(针对文件使用))
3、代码
import json
user_dict = {
'name' :'xiaoming',
'age' : 18,
'f' : 1.2,
'language':('python','java'),
'li':[1,2,3,4 ],
'kong': None,
't' : True,
'f' : False
} # dumps ---- 序列化 ----python字典对象转换为json格式的字符串
json_str = json.dumps(user_dict,indent=2,sort_keys=True )
print('json_str的值是:',json_str)
print('json_str的类型是:',type(json_str)) # json 格式的字符串 # loads ---- 反序列化 ---- json 格式的字符串转换为python字典对象
python_dict = json.loads(json_str)
print('python_dict的值是:',python_dict)
print('python_dict的类型是:',type(python_dict)) # 字典类型 # dump ---- 序列化 ----python字典对象转换为json格式的字符串并存入文件(针对文件用)
with open('temp.json','w+' ) as f:
'''
indent:默认为None,单行存储;设置值时,将多行存储
sort_keys:默认为False,不排序;设置为True是将根据键名排序
ensure_ascii:默认为True,中文将以Unicode形式存储;设置为False时,中文将以中文的形式存储
'''
json.dump(obj=user_dict,fp=f,indent=2,sort_keys=True,ensure_ascii=False) # load ---- 反序列化- 读取文件内容并转换为python字典对象(针对文件用)
with open('temp.json','r+' ) as f:
data = json.load(f)
4、python对象与json对象对应关系
python对象 | json对象 |
dict | object |
list, tuple | array |
str | string |
int, float | number |
None | null |
True/False | true/fase |
二、re 正则表达式
1、导入模块
import re
2、常用方法
search() | 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 |
findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
sub() | 替换类似于字符串中 replace() 方法 |
compile() | 编译正则表达式为模式对象 |
re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
获取 match对象 中的信息
group() | 返回匹配到的字符串 |
start() | 返回匹配的开始位置 |
end() | 返回匹配的结束位置 |
span() |
返回一个元组表示匹配位置(开始,结束) |
3、基本知识介绍
a.元字符
大多数字母和字符会匹配它们自身,有少数特殊字符我们称为元字符,它们不能匹配自身
b.子组匹配和模式重复次数
. ^ $ * + ? {} [] \ | ()
. | 匹配除换行符之外的所有的字符 |
\ | 用于转义 |
\d | 匹配0~9的数字 |
\s | 匹配任意的空白符,包括空格,制表符(Tab),换行符等 |
\w | 匹配字母或数字或下划线或汉字等 |
\b | 表示单词的边界 |
\. | 表示匹配点号本身 |
\D、\S、\W、\B | 是与小写的相反的作用 |
^ | 脱字符,匹配输入字符串的开始的位置 |
$ | 匹配输入字符串的结束位置 |
c.匹配次数
{M,N} | M和N 为非负整数,其中M<=N 表示前面的匹配M~N次 |
{M,} | 表示需要匹配M次 以上 |
{,N} | 等价于{0~N} |
{N} | 表示需要匹配N次 |
* | 匹配前面的子表达式零次或多次,等价于{0,} |
+ | 匹配前面的子表达式一次或多次,等价于{1,} |
? | 匹配前面的子表达式零次或一次,等价于{0,1} |
注:*?、+?、{n,m}? 贪婪与懒惰
d.子组匹配
[ ] : 字符类,将要匹配的一类字符集放在[]里面
[ . ? * ( ) {} ] | 匹配里面的这些符号 |
[0-9] | 匹配0到9的数字相当于\d |
[^\d] | 匹配除数字以外的字符,相当于\D |
[a-z] | 匹配所有的小写字母 |
[^a-z] | 匹配非小写字母 |
| | 相当于或(or)分支条件,如A | B 匹配字母A或者B 与[AB]是一样的 |
e.分组
() : 分组,将要匹配的一类字符集放在()组成一个小组
4、代码
import re s= 'gjianengasfasdfjianeng12335748' # 搜索字符串,以列表类型返回全部能匹配的子串,结果:['jianeng', 'jianeng']
a = re.findall('jianeng',s ) # 在一个字符串中搜索,匹配正则表达式的第一个位置,返回match对象,结果:<_sre.SRE_Match object; span=(1, 8), match='jianeng'>
a = re.search('jianeng',s) # 匹配数字,匹配3次,结果:['123', '357']
a = re.findall('\d{3}',s) # . 匹配除换行符之外的所有的字符,结果:['a', '我', 's', '\t', '+', '=', '_', '#', '$', 'd', 'f', 'a', 's', 'd', 'f', 'a', 's']
dian = re.findall('.','a我s\t+=_#$dfa\nsdfas') # \d # 匹配0~9的数字,结果:['1', '2', '3']
d = re.findall('\d','abc123') # \s # 匹配任意的空白符,包括空格,制表符(Tab),换行符等,结果;['\n', '\t', ' ']
s = re.findall('\s','abc\nbb\tsadf sdf' ) # \w # 匹配字母或数字或下划线或汉字等,结果:['a', 's', 'd', '_', '4', '5', '6', '我', 'i']
w = re.findall('\w','asd_456我i') # \b # 表示单词的边界,结果:['read']
b = re.findall(r'read\b','read readapple') # \. # 表示匹配点号本身,结果:['.', '.']
dian = re.findall(r'\.','asdf.as.d') #\D、\S、\W、\B # 是与小写的相反的作用,结果:['a', 'p', 'p', 'l', 'e']
D= re.findall(r'\D','a123pple')
# 结果:['a', 'b', 'c', 'b', 'b', 's', 'a', 'd', 'f', 's', 'd', 'f']
S = re.findall('\S','abc\nbb\tsadf sdf' )
# 结果:<_sre.SRE_Match object; span=(5, 9), match='read'>
b = re.search(r'read\B','read readapple') # ^ # 脱字符,匹配输入字符串的开始的位置,结果:<_sre.SRE_Match object; span=(0, 7), match='jianeng'>
t = re.search('^jianeng','jianengsadfsjianeng') # $ # 匹配输入字符串的结束位置,结果:<_sre.SRE_Match object; span=(12, 19), match='jianeng'>
t = re.search('jianeng$','jianengsadfsjianeng') # {N} # 匹配次数,结果:['123', '345', '345']
c = re.findall('\d{3}','89ahs123gvbsd34534566') # {M,N} #其中M<=N 表示前面的匹配M~N次,结果:['89', '123', '34534', '566']
c = re.findall('\d{2,5}','89ahs123gvbsd34534566') #{ M,} # 表示需要匹配M次以上,结果:['89', '123', '34534566']
c = re.findall('\d{2,}','89ahs123gvbsd34534566') # {,N} # 等价于{0~N},结果:['89', '', '', '', '1', '', '']
c = re.findall('\d{,2}','89ahs1s') # * # 匹配前面的子表达式零次或多次,等价于{0,},结果:['', '', '', '1525', '', '', '', '', '455', '']
x = re.findall( '\d*','fds1525sdfg455' ) # + # 匹配前面的子表达式一次或多次,等价于{1,},结果:['1525', '4554585444444545165854444444']
x = re.findall( '\d+','fds1525sdfg4554585444444545165854444444' ) # ? # 匹配前面的子表达式零次或一次,等价于{0,1},结果:['amount at about']['', '', '', '1', '5', '2', '5', '', '', '', '', '4', '5', '5', '']
x = re.findall( '\d?','fds1525sdfg455' ) # 注:*?、+?、{n,m}? 贪婪与懒惰
# 贪婪 满足要求,选最大的,结果:['amount at about']
tan = re.findall('a.*t','amount at about') # 懒惰 满足要求,就结束,结果:['amount', 'at', 'about']
lan = re.findall('a.*?t','amount at about') # 子组匹配
# [ ] # 字符类,将要匹配的一类字符集放在[]里面
# 结果:['f', 's', 'a', 'd', 'f', '4', '4', '5', '6', '5', '5', '4', '3', '5']
zi = re.findall('[a-z0-9]','fsadf44565_5435')
# a | b| c ,结果:['a', 'b', 'c']
zi = re.findall('[abc]','fsadf44565_543b5c') # [ . ? * ( ) {} ] # 匹配里面的这些符号,结果:['.', '?', '*', '(', ')', '{', '}']
zi = re.findall( '[.?*(){}]','.?*(){}') # [^\d] # 取反的意思,结果:['a', 'b', 'c']
zi = re.findall( '[^\d]','123456abc') # | # 相当于或(or)分支条件,结果:['abc', 'jianeng']
h = re.findall('abc|jianeng','abcsdfsajianeng') # () # 分组,将要匹配的一类字符集放在()组成一个小组,结果:<_sre.SRE_Match object; span=(9, 20), match='xxjianengxx'>
zu = re.search('xx(jianeng)xx','jianengfsxxjianengxxdgffgfxxjianengxxfgf') # 要jianeng ,xx(jianeng)xx,结果:['jianeng', 'jianeng']
zu = re.findall('xx(jianeng)xx','jianengfsxxjianengxxdgffgfxxjianengxxfgf') # re 模块常用方法
#finditer() # 搜索字符串,返回一个匹配结果的迭代类型,
# 每个迭代元素是match对象 s = 'sjianengsdfasjianeng15sadfjianeng666'
# 结果:<callable_iterator object at 0x000001D9BC488470>
finditer = re.finditer('jianeng',s)
'''
结果:
<_sre.SRE_Match object; span=(1, 8), match='jianeng'>
jianeng
1
8
(1, 8)
<_sre.SRE_Match object; span=(13, 20), match='jianeng'>
jianeng
13
20
(13, 20)
<_sre.SRE_Match object; span=(26, 33), match='jianeng'>
jianeng
26
33
(26, 33)
'''
for i in finditer:
print(i)
print(i.group())
print(i.start())
print(i.end())
print(i.span()) # sub() # 替换 类似于字符串中 replace() 方法,结果:s666sdfas66615sadfjianeng666
s2 = re.sub('jianeng','',s,count=2) # compile() # 编译正则表达式为模式对象
a = re.compile('jianeng') # a 要匹配jianeng
dd='fsadfasfjkjianeng'
b = a.findall(dd) # 结果['jianeng'] #re.split() # 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型,结果:['s', 'sdfas', '15sadfjianeng666']
c = re.split('jianeng',s,maxsplit=2)
三、python-json、正则的更多相关文章
- python安装json的方法;以及三种json库的区别
python中的json解释库有好几个,不同版本使用方法不同. 常用有 json-py 与smiplejson 两个包 其中,json-py 包含json.py外,还有一个minjson,两者用法上有 ...
- python re 正则
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
- python的正则re模块
一. python的正则 python的正则模块re,是其内置模块,可以直接导入,即import re.python的正则和其他应用的正则及其相似,有其他基础的话,学起来还是比较简单的. 二. 正则前 ...
- python的正则表达一
一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...
- python json模块 超级详解
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...
- python json模块(15)
JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...
- Python | JSON 数据解析(Json & JsonPath)
一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...
- python json基础学习01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object ...
- python 速记正则使用(转)
目录 python 速记正则使用(转) 正则表达式语法 字符与字符类 量词 组与捕获 断言与标记 条件匹配 正则表达式的标志 Python正则表达式模块 四大功能 两种方法 常用方法 匹配对象的属性与 ...
随机推荐
- Activiti实战04_简单流程
在Activiti实战03_Hello World中我们介绍了一个中间没有任何任务的流程,实现了流程的部署与查阅,而在本章中,将会为流程添加任务节点,是流程能够像个流程,变得更加丰满起来. 在上一节的 ...
- java类增强方式
我理解的增强类即是对类进行功能性扩展,除了网上常规的3种方法( 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理 ...
- 一、WebService基础概念
一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...
- TZOJ 4292 Count the Trees(树hash)
描述 A binary tree is a tree data structure in which each node has at most two child nodes, usually di ...
- phonegap geolocation android 问题
很纠结的 phonegap 使用定位的时候 android 获取地址异常的慢,为什么呢? 经过分析 如果android 只开启gprs 上网功能 可以立即获取到经纬度 如果只开启wifi 根本就获取不 ...
- 微信小程序中自定义swiper轮播图面板指示点的样式
重置样式: .swiper{ width: 100%; height: 240px; margin-bottom: 0.5rem; position:relative; } div.wx-swiper ...
- canvas旋转图片
canvas旋转图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Zookeeper安装过程
zookeeper的安装我反反复复安装了三次,前两次在root用户下安装都失败了,都启动不起来,第三次我改成普通用户安装,没想到成功了,很不可思议,步骤完全一样,接下来介绍一下具体的安装步骤: 1. ...
- 计蒜客 Zoning Houses(线段树区间最大次大)
Given a registry of all houses in your state or province, you would like to know the minimum size of ...
- 洛谷P1569属牛的抗议 超级强力无敌弱化版
P1569 [USACO11FEB]属牛的抗议Generic Cow Prote- 题目描述 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约 ...