一、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. (codeforces 853A)Planning 贪心

    Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...

  2. 有趣的纯CSS实现动态晴阴雨雪

    我们先来看看实现的效果吧 非常的美腻,对吧.这个是纯css,且单标签实现的哦~ 先贴完整代码,我们再来看看这个里面究竟有什么可以借鉴的知识点 <!DOCTYPE html> <htm ...

  3. BTC功能类

    <?php/*EasyBitcoin-PHP A simple class for making calls to Bitcoin's API using PHP.https://github. ...

  4. Stream的去重排序

    1.List<Integer>排序 List<Integer> list = new ArrayList<>();list.add(50);list.add(25) ...

  5. SSM11-solr服务的搭建

    1.  Solr服务搭建 1.1. Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 1.2. 搭建步骤 第一步:把solr 的压缩包上传到Li ...

  6. memcache 拓展

    需要安装Libevent.memcached.memcache. 参考网址:https://www.cnblogs.com/hejun695/p/5369610.html 启动:/usr/local/ ...

  7. Hackerrank--XOR love (Math系列)

    题目链接 Devendra loves the XOR operation very much which is denoted by ∧ sign in most of the programmin ...

  8. C++怎么读入非文本文件中的内容

    C++怎么读入非文本文件中的内容 3条回答 #include <io.h> #include <windows.h> void main() { char* pFileName ...

  9. JS简单实现:根据奖品权重计算中奖概率实现抽奖的方法

    本文主要介绍:使用 JS 根据奖品权重计算中奖概率实现抽奖的方法. 一.示例场景 1.1.设置抽奖活动的奖项名称 奖项名称:["一等奖", "二等奖", &qu ...

  10. Jeecms网站直接访问html静态页面

    jeecms网站维护,遇到了直接通过链接的方式访问静态页面,jeecms官网也做了详细的解答,但是没有得到满意的结果.但是通过自己的深入研究以及别人的帮助,发现了一个很好的解决方法. 首先说明一下je ...