一、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、正则的更多相关文章

  1. python安装json的方法;以及三种json库的区别

    python中的json解释库有好几个,不同版本使用方法不同. 常用有 json-py 与smiplejson 两个包 其中,json-py 包含json.py外,还有一个minjson,两者用法上有 ...

  2. python re 正则

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  3. Python -- Json 数据编码及解析

    Python  --  Json  数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...

  4. python的正则re模块

    一. python的正则 python的正则模块re,是其内置模块,可以直接导入,即import re.python的正则和其他应用的正则及其相似,有其他基础的话,学起来还是比较简单的. 二. 正则前 ...

  5. python的正则表达一

    一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...

  6. python json模块 超级详解

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也 ...

  7. python json模块(15)

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...

  8. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  9. python json基础学习01

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object  ...

  10. python 速记正则使用(转)

    目录 python 速记正则使用(转) 正则表达式语法 字符与字符类 量词 组与捕获 断言与标记 条件匹配 正则表达式的标志 Python正则表达式模块 四大功能 两种方法 常用方法 匹配对象的属性与 ...

随机推荐

  1. 关于Cocos2d-x多线程异步载入资源的问题

    我们通常使用CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("xxx.plist" ...

  2. pip安装requests报错unicodeEncodeError:'ascii' codec can\t encode charactesers in position 9-12:ordinal not in range(128)

    前提 : 已经安装pip(pip的安装我参考的是本博客转载脚本之家的步骤,实验可以成功) 1. 在cmd输入命令转到pip安装目录: 2. 运行后出现错误 3. 步骤2中的错误应该和编码有关.搜索百度 ...

  3. 高性能非阻塞 Web 服务器 Undertow

    Undertow 简介 Undertow是一个用java编写的.灵活的.高性能的Web服务器,提供基于NIO的阻塞和非阻塞API. Undertow的架构是组合式的,可以通过组合各种小型的目的单一的处 ...

  4. SDI在自定义的工具栏上添加下拉控件

    0.首先到自己的工具条上新建一个控件,并命名新ID 1.拷贝FlatComboBox.h和FlatComboBox.cpp到工程目录下 2.建立新类 class CTrackerToolBar : p ...

  5. osg如何设置抗锯齿(反走样,反锯齿)

    首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...

  6. Math concepts / 数学概念

    链接网址:Math concepts / 数学概念 – https://www.codelast.com/math-concepts-%e6%95%b0%e5%ad%a6%e6%a6%82%e5%bf ...

  7. LA3905 Meteor

    https://vjudge.net/problem/UVALive-3905 计算出每个点在相框中的时间段,扫描线做即可 关键在如何快速计算每个点在相框中的时间段.对每个点进行运动分解,进入的时间L ...

  8. istio1.1(openshift) 流量路由

    1.准备测试应用 准备两个nginx Pod和一个proxy 创建应用 apiVersion: apps.openshift.io/v1 kind: DeploymentConfig metadata ...

  9. Linux 拷贝有更改的文件

    cp -Ruv /home/username/trunk_new/app/* /data/httpdocs/wwwroot/app/

  10. 面试Mysql的几个常见问题

    1.insert时如果数据重复如何用update? ,,) ; 2.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启, ...