电子商务网站开发实训报告,wordpress社交链接设置,做50个网站,中国建设银行网站查工资python常用模块 re模块 一、正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 1、字符组 #xff1a; [字符组] 在同一个位置可能出现的各种字符组成了一个字符组#xff0c;在正则表达式中用[]表示 字符分为很多类#xff0c;比如数字、字母、标点等等。 假如你现在…python常用模块 re模块 一、正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 1、字符组 [字符组] 在同一个位置可能出现的各种字符组成了一个字符组在正则表达式中用[]表示 字符分为很多类比如数字、字母、标点等等。 假如你现在要求一个位置”只能出现一个数字”,那么这个位置上的字符只能是0、1、2…9这10个数之一。 2、字符 元字符 .:匹配除换行符以外的任意字符 \w:匹配字母或数字或下划线 \s:匹配任意的空白符 \d:匹配数字 \n:匹配一个换行符 \t:匹配一个制表符 \b:匹配一个单词的结尾 ^:匹配字符串的开始 $:匹配字符串的结尾 \W:匹配非字母或数字或下划线 \D:匹配非数字 \S:匹配非空白符 a|b:匹配字符a或字符b ():匹配括号内的表达式也表示一个组 3、量词 *:匹配零次或更多次 :匹配一次或更多次 ?:匹配零次或一次 {n}:匹配n次 {n,}:匹配n次或更多次 {n,m}:匹配n次至m次 4、.*$的用法 5、*?{ }的用法 6、字符集^用法 7、分组 ()与 或 ^用法 8、转义符 \用法 9、贪婪匹配用法 二、python中re模块及常用方法 1、介绍 re 模块使 Python 语言拥有全部的正则表达式功能
re 模块也提供了与这些方法功能完全一致的函数这些函数使用一个模式字符串做为它们的第一个参数 2、常用方法 参数说明 pattern —— 匹配的正则表达式 string —— 待匹配的字符串 flags —— 标志位用于控制正则表达式的匹配方式如是否区分大小写多行匹配等等 匹配对象方法 group(num0) —— 匹配的整个表达式的字符串group() 可以一次输入多个组这里写代码片号在这种情况下它将返回一个包含那些组所对应值的元组 groups() —— 返回一个包含所有小组字符串的元组从1到所含的小组号 ①☆findall()返回所有满足匹配条件的结果至列表中 import re
res re.findall(s,life is short)
print(res)[s,s] ②☆search() 返回第一个包含匹配条件的信息对象可以调用该对象的group()方法将匹配的字符输出如果没有匹配到则调用group()方法会报错 import re
res re.search(s,life is short)
print(res.group())s ③☆match() 与search()方法类似但是仅在字符串开始出匹配返回第一个包含匹配条件的信息对象调用该对象的group()方法将匹配的字符输出如果没有匹配到则调用group()方法会报错 import re
res re.match(l,life is short)
print(res.group())l ④split() 逐个按符合条件的字符串对待匹配字符串进行切分返回结果列表 import re
res re.split([ab],abcd) # 首先按a进行切分形成[,bcd]之后再按b进行切分形成[,,cd]
print(res)[,,cd] ⑤sub() 将待匹配字符串中满足匹配条件的内容进行替换最后一个参数指定替换的次数返回替换后的字符串 import re
res re.sub(\d,_,life8is7short7,2)
print(res)life_is_short7 ⑥subn() 与sub()方法类型但是无法指定替换的次数并且输出的是一个元组包括替换后的字符串和替换的总次数 import re
res re.subn(\d,_,life8is7short7)
print(res)(life_is_short_, 3) ⑦compile() 将正则表达式编译成为一个正则表达式对象之后可以用re模块中的方法对对象进行操作 import re
obj re.compile(\d{3})
res obj.search(123abc456)
或者res re.search(obj,123abc456)
print(res.group()) ⑧finditer() finditer返回一个存放匹配结果的迭代器用next等方法取出存放结果的对象再用group()方法取出结果 import re
res re.finditer(\d,a1b2c3d4e5)
print(next(res).group())
print(next(res).group())
print(next(res).group())
print([i.group() for i in res])123[4, 5] ★findall的优先级查询: 将findall()方法中匹配条件中加括号后只会输出匹配到的字符串可以在括号中加入?:取消权限 import re
res re.findall(www.(baidu|google).com,www.baidu.com)
print(res)[baidu]#取消权限
import re
res re.findall(www.(?:baidu|google).com,www.baidu.com)
print(res)[www.baidu.com] ★split的优先级查询:将split()方法中的匹配条件加括号后会将满足条件的切分字符也输出值最终列表中同样可以在括号中加入?:取消权限 import re
res re.split((\d),life1is2short3)
print(res)[life, 1, is, 2, short, 3, ]#取消权限
import re
res re.split((?:\d),life1is2short3)
print(res)[life, is, short, ] collections模块 在内置数据类型dict、list、set、tuple的基础上 collections模块还提供了几个额外的数据类型Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.namedtuple: 生成可以使用名字来访问元素内容的tuple from collections import namedtuple
Point namedtuple(point,[x,y])
p1 Point(1,2)
p2 Point(99,100)print(p1.x)
print(p1.y)
print(p2) 12point(x99, y100) 2.deque: 双端队列可以快速的从另外一侧追加和推出对象 使用list存储数据时按索引访问元素很快但是插入和删除元素就很慢了因为list是线性存储数据量大的时候插入和删除效率很低。 deque是为了高效实现插入和删除操作的双向列表适合用于队列和栈 from collections import deque
dq deque([A,B,C])
dq.append(X)
dq.appendleft(Y)
print(dq)deque([Y, A, B, C, X])print(dq.pop())Xprint(dq.popleft())Ydq.insert(1,666)
print(dq)deque([A, 666, B, C]) Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型以字典的键值对形式存储其中元素作为key其计数作为value。 计数值可以是任意的Interger包括0和负数。Counter类和其他语言的bags或multisets很相似。 from collections import Counter
c Counter(aaabbbbcccddddddeeeeffffff)
print(c)Counter({d: 6, f: 6, e: 4, b: 4, c: 3, a: 3}) 4.OrderedDict: 有序字典 使用dict时Key是无序的。在对dict做迭代时我们无法确定Key的顺序。 如果要保持Key的顺序可以用OrderedDict from collections import OrderedDict
od OrderedDict([(a,1),(b,2),(c,3)])
print(od)
print(od[a])
print(od[b])
print(od[c]) OrderedDict([(a, 1), (b, 2), (c, 3)])123 5.defaultdict: 带有默认值的字典 from collections import defaultdict
values [11, 22, 33,44,55,66,77,88,99,90]dd defaultdict(list)
dd[k1].append(1)
dd[k1].append(2)
dd[k1].append(3)
dd[k1].append(4)
dd[k1].append(5)
print(dd)defaultdict(class list, {k1: [1, 2, 3, 4, 5]}) 时间模块 一、表示时间的三种方式 1、时间戳timestamp 通常来说时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”返回的是float类型。 import time
print(time.time())1515570662.77503 2、时间字符串Format String import time
print(time.strftime(%Y-%m-%d %H-%M-%S))2018-01-10 15-59-16 3、结构化时间struct_time import time
print(time.localtime())time.struct_time(tm_year2018, tm_mon1, tm_mday10, tm_hour16, tm_min0, tm_sec33, tm_wday2, tm_yday10, tm_isdst0) 二、几种格式之间的转换 1、时间戳–结构化时间 语法
time.gmtime(时间戳) #UTC时间与英国伦敦当地时间一致
time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法与UTC时间相差8小时UTC时间8小时 北京时间 import time
print(time.localtime(1515570662.77503))time.struct_time(tm_year2018, tm_mon1, tm_mday10, tm_hour15, tm_min51, tm_sec2, tm_wday2, tm_yday10, tm_isdst0) import time
print(time.gmtime(1515570662.77503))time.struct_time(tm_year2018, tm_mon1, tm_mday10, tm_hour7, tm_min51, tm_sec2, tm_wday2, tm_yday10, tm_isdst0) 2、结构化时间–时间戳 语法
time.mktime(结构化时间) import time
time_tuple time.localtime(1500000000)
print(time.mktime(time_tuple))1500000000.0 3、字符串时间–结构化时间 语法
time.strptime(时间字符串,字符串对应格式) import time
print(time.strftime(%Y-%m-%d %X))2018-01-10 16:19:46
print(time.strftime(%Y-%m-%d,time.localtime(1515570662.77503)))2018-01-10 4、结构化时间–字符串时间 语法:
time.strftime(“格式定义”,”结构化时间”) 结构化时间参数若不传则现实当前时间 import time
print(time.strptime(2017-03-16,%Y-%m-%d))time.struct_time(tm_year2017, tm_mon3, tm_mday16, tm_hour0, tm_min0, tm_sec0, tm_wday3, tm_yday75, tm_isdst-1)
print(time.strptime(07/24/2017,%m/%d/%Y))time.struct_time(tm_year2017, tm_mon7, tm_mday24, tm_hour0, tm_min0, tm_sec0, tm_wday0, tm_yday205, tm_isdst-1) random模块 一、常用方法 1、随机小数 import random
print(random.random()) # 随机输出在0-1之间的小数0.11828833626857149import random
print(random.uniform(1,5)) # 随机输出在范围之间的小数2.164732131520036 2、随机整数 import random
print(random.randint(5,10)) # randint中的范围包括首尾8import random
print(random.randrange(5,10,2)) # randrange中的范围顾首不顾尾可以指定步长7 3、随机选择一个返回 import random
print(random.choice([1,23,[4,5],(6,7)]))(6, 7) 4、随机选择多个返回可以指定返回的个数 import random
print(random.sample([1,23,[4,5],(6,7)],2)) [(6, 7), 1] 5、打乱顺序 import random
item[1,2,3,4,5,6,7,8,9]
random.shuffle(item)
print(item)[2, 6, 8, 3, 5, 4, 7, 1, 9] 二、应用实例 import random
def v_code():code for i in range(5):numrandom.randint(0,9)alfchr(random.randint(65,90))addrandom.choice([num,alf])code.join([code,str(add)])return code
print(v_code()) os模块 os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录即当前python脚本工作的目录路径
os.chdir(dirname) 改变当前脚本工作目录相当于shell下cd
os.curdir 返回当前目录: (.)
os.pardir 获取当前目录的父目录字符串名(..)
os.makedirs(dirname1/dirname2) 可生成多层递归目录
os.removedirs(dirname1) 若目录为空则删除并递归到上一级目录如若也为空则删除依此类推
os.mkdir(dirname) 生成单级目录相当于shell中mkdir dirname
os.rmdir(dirname) 删除单级空目录若目录不为空则无法删除报错相当于shell中rmdir dirname
os.listdir(dirname) 列出指定目录下的所有文件和子目录包括隐藏文件并以列表方式打印
os.remove() 删除一个文件
os.rename(oldname,newname) 重命名文件/目录
os.stat(path/filename) 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符win下为\\,Linux下为/
os.linesep 输出当前平台使用的行终止符win下为\t\n,Linux下为\n
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win-nt; Linux-posix
os.system(bash command) 运行shell命令直接显示
os.popen(bash command) 运行shell命令获取执行结果
os.environ 获取系统环境变量 os.path部分 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以或\结尾那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在返回True如果path不存在返回False
os.path.isabs(path) 如果path是绝对路径返回True
os.path.isfile(path) 如果path是一个存在的文件返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小 sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List第一个元素是程序本身路径
sys.exit(n) 退出程序正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称 二、应用实例异常处理和status import sys
try:sys.exit(1)
except SystemExit as e:print(e) 序列化模块 一、定义 将原本的字典、列表等内容转换成一个字符串的过程叫做序列化其反过程叫反序列化。 二、目的 以某种存储形式使自定义对象持久化将对象从一个地方传递到另一个地方使程序更具维护性三、过程 字符串——反序列化——其他数据结构字符串——序列化——其他数据结构四、序列化相关模块 1、json:用于字符串(包括其他支持json的语言)和python数据类型间进行转换 ①dumps、loads 内存操作dumps用于将结构化数据转化成字符串loads用于将字符串转化为结构化数据 注意json转换完的字符串类型的字典中的字符串是由”“表示的 import json
dic {k1:v1,k2:v2,k3:v3}
dic_d json.dumps(dic)
print(dic_d){k2: v2, k3: v3, k1: v1}dic_s json.loads(dic_d)
print(dic_s){k1: v1, k3: v3, k2: v2} ②dump、load 文件句柄操作dumps用于将结构化数据转化成字符串并操作文件句柄存储于文件中 loads用于将字符串转化为结构化数据并操作文件句柄将数据从文件中读至内存 import json
dic {k1:v1,k2:v2,k3:v3}
with open(json_file,modew) as f:dic_fdjson.dump(dic,f)
文件中的内容{k3: v3, k2: v2, k1: v1}with open(json_file,moder) as f:dic_fsjson.load(f)
print(dic_fs){k1: v1, k3: v3, k2: v2} ③ensure_ascii关键字参数ensure_ascii默认True如果数据中包括非ascii字符则会以bytes类型数据存储在文件中若将ensure_ascii改为False则会以人类可识别字符存储 import json# 默认ensure_ascii是True说明支持系统用ascii编码进行数据存储所以数据在文件中是以bytes类型(utf-8/utf-16/GBK)等方式进行
# 存储的人类不能直接识别文件中的中文数据内容如果非要识别则需要进行解码操作
# 如果将ensure_ascii改为False则在数据存储时就将数据按照人类可识别的内容进行存储可直接阅读
dic {姓名:张三,性别:男,年龄:18}
with open(json_file,modew) as f:dic_fd json.dump(dic,f){\u5e74\u9f84: 18, \u6027\u522b: \u7537, \u59d3\u540d: \u5f20\u4e09}str1 b\u5e74\u9f84
print (str1.decode(unicode_escape))年龄dic {姓名:张三,性别:男,年龄:18}
with open(json_file,modew) as f:dic_fd json.dump(dic,f,ensure_asciiFalse)乱码因为在windows系统下默认用GBK存储但是道理没变如果是内存操作则可以通过pycharm是utf-8的字符编码直接读出 ④其他参数说明 Skipkeys默认值是False如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None)设置为False时就会报TypeError的错误。此时设置成True则会跳过这类key ensure_ascii:当它为True的时候所有非ASCII码字符显示为\uXXXX序列只需在dump时将ensure_ascii设置为False即可此时存入json的中文即可正常显示。) indent应该是一个非负的整型如果是0就是顶格分行显示如果为空就是一行最紧凑显示否则会换行且按照indent的数值显示前面的空白分行显示这样打印出来的json数据也叫pretty-printed json separators分隔符实际上是(item_separator, dict_separator)的一个元组默认的就是(‘,’,’:’)这表示dictionary内keys之间用“,”隔开而KEY和value之间用“”隔开。 sort_keys将数据根据keys的值进行排序。 import json
data {username:[张三,李四],sex:male,age:16}
json_dic2 json.dumps(data,sort_keysTrue,indent2,separators(,,:),ensure_asciiFalse)
print(json_dic2)\\\ {age:16,sex:male,username:[张三,李四]} 2、pickle:用于python特有的类型和python的数据类型间进行转换 注意 ①与json相似pickle提供的方法与json相同不同的是pickle可以转换python特有的数据类型而非只有dic、list(tuple)②pickle在文件存储时使用bytes类型进行存储所以在读写文件的时候要求mode为wb/rb模式3、shelve:只提供一个open方法用key来访问使用起来与字典类似 ①序列化到文件、从文件反序列化 import shelve
with shelve.open(shelve_file) as f:f[key] {1,2,3,4,5,6,7,8,9}import shelve
with shelve.open(shelve_file) as f:data f[key]
print(data){1, 2, 3, 4, 5, 6, 7, 8, 9} ②该模块不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作我们可以让shelve通过只读方式打开DB。 import shelve
with shelve.open(shelve_file,flagr) as f:data f[key]
print(data){1, 2, 3, 4, 5, 6, 7, 8, 9} ③??? 该模块在默认情况下不会记录待持久化对象的任何修改所以需要在shelve.open()时修改默认参数否则对象的修改不会保存。 import shelve
with shelve.open(shelve_file, writebackTrue) as f2:print(修改前 str(f2[key]))f2[key] this was not here before修改前{1, 2, 3, 4, 5, 6, 7, 8, 9}with shelve.open(shelve_file, writebackTrue) as f3:print(修改后str(f3[key]))修改后this was not here before 转载于:https://www.cnblogs.com/lidaxu/p/8277245.html