pythonday05(正则深入、冒泡排序算法、自定义模块、常用标准模块)

一、正则深入

re

匹配数字开头

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地址:

#匹配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) #从头匹配

re.search(pattern,string) #匹配整个字符串,直到找到一个匹配

re.split() #将匹配到的格式当做分隔点对字符串分成列表类型

re.findall() # 找到所有要匹配的字符并返回列表格式

示例:
import re
string = "sdsdss(welcome)dff(china)"
m = re.findall('(.*?)',string) #匹配所有以(开头和以)结尾的字符串,返回类型为list
print(m) #['(welcome)', '(china)']
print(type(m))  #<class 'list'>
View Code

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'>
View Code

模式

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邮箱注册,感谢你的支持!")

二、模块

模块介绍

模块:代码实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来处理和代码间的耦合。可能需要多个.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)
View Code
random模块
产生随机数
import random
 
#产生随机小数
print(random.random())
'''
0.8426794741026359
0.8703558703687821
'''
 
#产生随机整数
print(random.randint(1,10))
print(random.randrange(1,10))
'''
1
9
'''
View Code
生成随机验证码
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))
View Code

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下为"	
",Linux下为"
"
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所指向的文件或者目录的最后修改时间
View Code

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] #输入一行内容,减去后面的最后一个

使用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)
View Code

json 和 pickle

json和pickle是用于序列化的两个模块:
json 

json:用于处理字符串和python数据类型间的转换

json模块提供了四个功能:dumps、dump、loads、load

json在所有的语言中都通用,存取的字节字符

 pickle:


pickle:用于处理python特有类型和python数据类型间的转换

pickle模块提供了四个功能:dumps、dump、loads、load

在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)

功能:拷贝文件和状态信息
原文地址:https://www.cnblogs.com/apnsa/p/5195198.html