re模块,正则表达式 json模块 xlrd模块sys
一、python的re模块
1、正则匹配,使用re模块
2、正则表达式是一种对字符和特殊字符操作的逻辑公式,用正则表达字符来过滤的逻辑
3、re正则表达式作用:
快速高效查找和分析字符,进行匹配如:查找、比对、匹配、替换、插入、添加、删除等
二、认识正则表达式的特殊元素:
\d:数字0-9
\D:非数字
\s:空白字符
\n:换行符
\r:回车符re模块数量词匹配:
符号^:表示的匹配字符以什么开头
符号$:表示的匹配字符以什么结尾
符号*:匹配*前面的字符0次或n次
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
符号?:匹配?前面的字符0次或1次
符号{m}:匹配前一个字符m次
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
正整数
(1)findall
从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
案例:
# import re # str1='123ttsfgh' # s=re.findall('f',str1) # print(s) #['f'] # # import re # str1='123ttsfgh' # s=re.findall('t',str1) # print(s) #['t', 't']
(2)search
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
案例:
import re str1='fr235bbgbgf' s=re.search('r',str1) print(s) #<re.Match object; span=(1, 2), match='r'> import re str1='fr235bbgbgf' s=re.search('6',str1) print(s) #None
(3)match
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+' ,则匹配1次或者多次,无'+'只匹配一次
import re str1='3r4r4r3t' s=re.match('s',str1) print(s) #None import re str1='3r4r4r3t' s=re.match('r',str1) print(s) #None
(三)实操
\d:数字0-9
案例:
# import re # str='1e2er3r3' # s=re.findall('\d',str) # print(s) #['1', '2', '3', '3']
\D:非数字
案例:
# import re # str1='eeee3333r3r3' # s=re.findall('\D',str1) # print(s) #['e', 'e', 'e', 'e', 'r', 'r']
\s:空白字符
# import re # str='23rrrr r' # s=re.findall('\s',str) # print(s) #[' ']
\n:换行符
import re
str1="abcd1 ee\nfg a3 m6\n n"
s=re.findall("\n",str1)
print(s) #
\r:回车符
re模块数量词匹配:
符号^:表示的匹配字符以什么开头
import re str='aabcdd' s=re.findall('^a',str) print(s) #['a'] import re str='aabcdd' s=re.findall('^d',str) print(s) #[]
符号$:表示的匹配字符以什么结尾
import re str='dddeeer' s=re.findall('d$',str) print(s) #[] import re str='dddeeer' s=re.findall('r$',str) print(s) #['r']
符号*:匹配*前面的字符0次或n次
import re str='t4t4t4t4' s=re.findall('t*',str) print(s) #['t', '', 't', '', 't', '', 't', '', ''] import re str='t4t4t4t4' s=re.findall('4*',str) print(s) #['', '4', '', '4', '', '4', '', '4', '']
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
import re str='t4t444t444t4' s=re.findall('4+',str) print(s) #['4', '444', '444', '4']
符号?:匹配?前面的字符0次或1次
import re str='t4t444t444t4' s=re.findall('4?',str) print(s) #['', '4', '', '4', '4', '4', '', '4', '4', '4', '', '4', '']
符号{m}:匹配前一个字符m次
import re
str1="abaaaacaad"
s=re.findall("a{3}",str1)
print(s) # ['aaa']
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是正整数
import re str='aaawwwwqqqqrr' s=re.findall('a{1,5}',str) print(s) #['aaa']
\w
匹配[A-Za-z0-9]
import re str1='aass!!aa#aa1aa1d' s=re.findall('\w',str1) print(s) #['a', 'a', 's', 's', 'a', 'a', 'a', 'a', '1', 'a', 'a', '1', 'd']
\W
匹配非[A-Za-z0-9]
import re str1='aass!!aa#aa1aa1d' s=re.findall('\W',str1) print(s) #['!', '!', '#']
json模块
(1)python中的json(java script object notation)格式是轻量级的文本数据交互格式
(2)json和字典一样
json模块可以实现json数据的序列化和反序列化
(1)序列化:将可存放在内存中的python 对象转换成可物理存储和传递的形式
实现方法:load() loads()
(2)反序列化:将可物理存储和传递的json数据形式转换为在内存中表示的python对象
实现方法:dump() dumps()
一、将python数据类型换成字典
json.dump
json.dumps
二、将json格式转换成python类型
(1)dumps 将python类型转换成json格式的字符串
import json d={"name":"zs","age":18,"isonly":True}#true改成string转换小写 print(type(d)) #<class 'dict'> print(d) #{'name': 'zs', 'age': 18, 'isonly': True} js=json.dumps(d,ensure_ascii=False)#解决中文乱码 print(js) #{"name": "zs", "age": 18, "isonly": true} print(type(js)) #<class 'str'>
备注:
1、python中的字典是单引号,字符是双引号
2、字典是大写True, 字符是小写
(2)dump 将python类型转换成json格式保存为json文件中
创建json文件 import json d={"name":"zs","age":18} print(type(d)) #<class 'dict'> print(d) #{'name': 'zs', 'age': 18} js=json.dump(d,open(r"d.json","w"))
#往文件中添加字符json import json j={'name':'zs','age':18,"no":["123","456"],"sex":"男","isonly":True} print(j) print(type(j)) jsonzfc=json.dumps(j,ensure_ascii=False)# 将一个字典转换称json print(jsonzfc) print(type(jsonzfc))#dumps json.dump(j,open("data.json","a"))
#indent=4 indent 分隔符 ,排序 import json j={'name':'zs','age':18,"no":["123","456"],"sex":"男","isonly":True} print(j) print(type(j)) jsonzfc=json.dumps(j,indent=4,ensure_ascii=False)# 将一个字典转换称json print(jsonzfc) print(type(jsonzfc))#dumps json.dump(j,open("data.json","a"))
import json j={'name':'zs','age':18,"no":["123","456"],"sex":"男","isonly":True} print(j) print(type(j)) jsonzfc=json.dumps(j,indent=4,ensure_ascii=False)# 将一个字典转换称json print(jsonzfc) print(type(jsonzfc))#dumps json.dump(j,open("data.json","a",encoding='utf-8'),ensure_ascii=False,indent=4) #字符在文件中中文处理办法encoding='utf-8'),ensure_ascii=False 格式化四个字符indent=4
对json中字符 排序 :sort_keys=True 排序
jsonzfc=json.dumps(j,indent=4,ensure_ascii=False,sort_keys=True)# 将一个字典转换称json
(3)loads 将json格式的字符串转换成python类型对象
import json
str1='{"name": "zs", "age": 18}'
print(type(str1)) #<class 'str'> json格式
d=json.loads(str1)
print(d) #{'name': 'zs', 'age': 18}
print(type(d)) #<class 'dict'> 字典
import json json2='["a","b" ,{"no": 123, "sex": "男"}]' print(type(json2))# <class 'str'> listgs=json.loads(json2) print(type(listgs)) #<class 'list'>
(4)load 将文件中的json格式的文件中读取数据转换成python类型对象
import json
d=json.load(open(r"F:\pythonProject\d.json","r"))
print(d) #{'name': 'zs', 'age': 18}
print(type(d)) #<class 'dict'>
总结:
1、将python字符类型转化成json格式
dumps 、dump
2、将json格式转换成python字符类型
loads 、load
3、python字符类型:
字符串、字典、元组、列表、集合
xlrd模块
(1)xlrd是可用于读取excel表格数据(不支持写操作,写操作需要xlwt模块实现)
(2)支持xlsx 和xls 格式的格式的表格(不支持csv文件,csv文件可用python自带的csv模块操作)
(3)模块安装方式:pip3 install xlrd
(4)模块导入方式:import xlrd
一、在dos中安装xlrd
pip install xlrd==1.2.0
或
pip3 install xlrd ==1.2.0
pip list查看是否安装成功
卸载xlrd:
pip uninstall xlrd 卸载xlrd
第二种安装方式:
1、
版本1.2.0
二、新建一个xlsx表格
1、编辑表格
2、
import xlrd
data=xlrd.open_workbook(r"D:\ls\cb\ss.xlsx")
print(data.sheets()) #通过索引获取sheet对象
print(data.sheet_by_index(0))#通过索引获取sheet对象
#print(data.sheet_by_name(“gs1”)) ##通过名称获取sheet对象
print(data.sheet_names()) #获取names返回表中所有的工作名字
=============================================================
3、实战xlrd
import xlrd
data=xlrd.open_workbook(r"D:\ls\cb\ss.xlsx") #打开我文件,后面接的是路径
s=data.sheet_by_index(0) #通过索引0表示第一个页
#print(s.row_values(0)) #通过索引获取单元格中的值,0表示第一行
#print(s.row_values(0,1,3)) #[‘性别’, ‘年龄’]
第一个0表示行数,第一行3第二个1表示列索引数1表示第2列,第三个数3表示结束列(不包含结束列)
print(s.row_values(3,1,3)) #[12.0, 20.0]
#print(s.col_values(0)) #获取列所有的数据
print(s.col_values(1,6,12))
#第一1表示索引是第2列,第二数6表示的是第7行,第三个数12表示是第13行,不包含13行
print(s.col_values(1,11,12)) #[20.0]
print(s.row_values(11,1,2)) #[20.0]
#获取表格中第一列所有的数据
for i in range(s.nrows):
print(s.row_values(i)[0]) #遍历
拓展sys
import sys print(sys.path)#检索python下的包 Copyright (c) 1995-2001 Corporation for National Research Initiatives. #All Rights Reserved. print(sys.copyright) #版本信息 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. #All Rights Reserved. print(sys.getfilesystemencoding()) #编码格式utf-8 print(sys.version) #获取python的版本信息 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] print(sys.platform) #win32 当前运行平台