1、正则深刻python
re正则表达式
匹配数字开头shell
import re #匹配以数字开头 p = re.compile("^[0-9]") #使用compile进行编译正则表达式,在大量匹配处理的时候很是有效 m = p.match("14534Abc") print(m.group()) #输出结果:1 ''' m = re.match("^[0-9]","14534Abc") print(m.group()) #输出结果:1 '''
匹配数字、字母等开头编程
import re #匹配以数字和字母开头 p = re.compile("^[0-9A-Za-z]") m = p.match("AK14534Abc") print(m.group()) #输出结果:A
匹配ip地址:json
#匹配IP地址 string = '180.115.183.45 - - [03/Feb/2016:10:35:50 +0800] "CONNECT imppl.tradedoubler.com:443 HTTP/1.0" 400 172 "-" "-"' p = re.compile("([0-9]{1,3}\.){3}\d{1,3}") ip = p.match(string).group() # ip = re.match("([0-9]{1,3}\.){3}\d{1,3}",string).group() print(ip)
正则表达式经常使用5种操做缓存
re.match(pattern,string) #从头匹配bash
re.search(pattern,string) #匹配整个字符串,直到找到一个匹配dom
re.split() #将匹配到的格式当作分隔点对字符串分红列表类型ide
re.findall() # 找到全部要匹配的字符并返回列表格式函数式编程
示例: import re string = "sdsdss(welcome)dff(china)" m = re.findall('\(.*?\)',string) #匹配全部以(开头和以)结尾的字符串,返回类型为list print(m) #['(welcome)', '(china)'] print(type(m)) #<class 'list'>
re.sub(pattern, repl, string, count,flag) # 替换匹配到的字符
示例: import re string = "sdsdss(welcome)dff(china)" m = re.sub("\(|\)","\"",string) #匹配"("或者")",而后将其替换成双引号 print(m) #sdsdss"welcome"dff"china" print(type(m)) #<class 'str'>
模式
re.l #大小写不敏感
import rz string = "swht" m = re.search("[A-Z]",string,flags = re.I) print(m.group()) #s
匹配手机号:
import re string = "sdssaawa15865921165sdsdscf" m = re.search("(1)([358]\d{9})",string) print(m.group())
匹配IP地址:
import re ip_addr = "inet 192.168.60.223 netmask 0xffffff00 broadcast 192.168.60.255" IP = re.search("(([1-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])\.){3}[0-9]{1,3}",ip_addr) print(IP.group()) #192.168.60.223
匹配邮箱地址:
import re emailstr = "qingbo.song@gmail.com www.baidu.com" email = re.search("^[a-z]([0-9a-z]|\.){4,20}@[0-9a-z]{0,10}\.[0-9a-z]{0,8}",emailstr) print(email.group()) #qingbo.song@gmail.com #只匹配gmail邮箱 import emailstr = "test@163.com www.baidu.com" email = re.search("^[a-z]([0-9a-z]|\.){4,20}@gmail\.com",emailstr) if email: print(email.group()) #test@163.com else: print("系统只接受163邮箱注册,感谢你的支持!")
2、模块
模块介绍
模块:代码实现了某个功能的代码集合。 相似于函数式编程和面向过程编程,函数式编程则完成一个功能,其余代码用来处理和代码间的耦合。可能须要多个.py的文件组成。 模块类型: 1. 自定义模块 2. 内置标准模块(标准库) 3. 开源模块 1. 下载: 1. yum 2. apt-get 3. pip 4. easy_install 5. 源码编译安装 python stup.py install
导入模块
import module from module.xx.xx import xx from module.xx.xx import xx as rename #不推荐下面的导入方式,若是被导入的模块中含有与当前文件中相同名称的函数,容易产生调用混乱。 from module.xx.xx import *
time & datetime模块
import time import datetime #做用:计算一个程序从执行到结束用的时间 print(time.clock()) #返回处理器时间,3.3开始已废弃 print(time.process_time()) #返回处理器时间,3.3开始已废弃 #获取系统的当前时间,从1970年1月1日0:00到当前时间的秒数 print(time.time()) #返回当前系统时间戳 #格式化输出的时间 print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间 print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式,输出昨天的时间Tue Jan 25 18:23:48 2016 #time.struct_time(tm_year=2016, tm_mon=2,c=48, tm_wday=5, tm_yday=44, tm_isdst=0) #gmtime是从零时区算起的格林时间 print(time.gmtime(time.time()-86640)) #将时间戳转换成struct_time格式 #当前时间,是按照系统当前时区算起的 print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回 的本地时间 print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式 #time.sleep(4) #sleep #格式化输出时间 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式 #time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #'2016-02-14 12:45:49' print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式 #datetime module #将时间戳转换成日期格式 print(datetime.date.today()) #输出格式python2 2016-01-26 python3:datetime.date(2016, 2, 14) print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式 current_time = datetime.datetime.now() # print(current_time) #输出2016-01-26 19:04:30.335935 print(current_time.timetuple()) #返回struct_time格式 #datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) #将当前的时间替换成输入的时间 print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换 str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式 new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比如今加10天 new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比如今减10天 new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比如今减10小时 new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比如今+120s print(new_date)
random模块
产生随机数
import random #产生随机小数 print(random.random()) ''' 0.8426794741026359 0.8703558703687821 ''' #产生随机整数 print(random.randint(1,10)) print(random.randrange(1,10)) ''' 1 9 '''
生成随机验证码
import random def checkcode(n): checkcode = '' for i in range(n): current = random.randrange(0,4) if current != i: tmp = chr(random.randint(65,90)) else: tmp = random.randint(0,9) checkcode += str(tmp) return checkcode print(checkcode(6))
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") 重命名文件/目录,或者移动,至关于shell命令mv os.stat('path/filename') 获取文件/目录信息 os.sep 输出操做系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示,只是单个shell命令的执行 os.environ 获取系统环境变量 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所指向的文件或者目录的最后修改时间
sys模块
用于提供对解释器相关的操做
sys.argv 命令行参数List,第一个元素是程序自己路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操做系统平台名称 sys.stdout.write('please:') val = sys.stdin.readline()[:-1] #输入一行内容,减去后面的最后一个\n
使用sys和time模块生成进度条
生成进度条。调用函数输入的参数为进度条长度 ''' import sys,time def processbar(rangenum): for i in range(rangenum): if i == 0: sys.stdout.write("0%[#") elif i == rangenum - 1: sys.stdout.write("#]100%") else: sys.stdout.write("#") #刷新缓存,使其实时显示出来 sys.stdout.flush() time.sleep(0.5) processbar(16)
json 和 pickle
json和pickle是用于序列化的两个模块:
json
json模块提供了四个功能:dumps、dump、loads、load
json在全部的语言中都通用,存取的字节字符json:用于处理字符串和python数据类型间的转换
pickle:
pickle模块提供了四个功能:dumps、dump、loads、load
在python中独有一个模块,存取二进制字符pickle:用于处理python特有类型和python数据类型间的转换
不单单能够序列化简单的字符、列表、字典,还能序列化函数、类以致于整个程序
关于dump和dumps的区别
dump直接将序列化后的字符写到文件中,dumps是将序列化后的字符先赋给一个变量,而后再有write方法将其写入到文件中
关于load和loads的区别
load直接从文件中读取内容,loads是从内存中获取文件的内容
shutil模块
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
功能:将文件内容拷贝到另外一个文件中,能够部份内容
shutil.copyfile(src, dst)
功能:仅拷贝文件
shutil.copymode(src, dst)
功能:仅拷贝权限,内容、组、用户均不变
shutil.copystat(src, dst)
功能:拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst)
功能:拷贝文件和权限
shutil.copy2(src, dst)
功能:拷贝文件和状态信息