Python 2 一些实用模块的使用

穿精又带淫゛_ 提交于 2020-02-19 07:31:19

time模块,sys模块,os模块,random模块, shutil模块 json & pickle 模块,re模块

 

time模块:

在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。

time.localtime([secs])       将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。time.gmtime([secs])          和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。time.time()                  返回当前时间的时间戳。time.mktime(t)               将一个struct_time转化为时间戳。time.sleep(secs)             线程推迟指定的时间运行。单位为秒time.asctime([t])            把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。time.ctime([secs])           把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。time.strftime(format[, t])   把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
格式含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
 

 

               

sys模块:

 

sys.argv           #命令行参数List,第一个元素是程序本身路径
sys.exit(n)        #退出程序,正常退出时exit(0)
sys.version        #获取Python解释程序的版本信息
sys.maxint         #最大的Int值
sys.path           #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       #返回操作系统平台名称
sys.path.append(path)  #将环境变量加入系统环境中sys.stdout.write('please:')   #相当于不加\n的printval = sys.stdin.readline()[:-1]


实例:

####输出进度条#####
import sys,time
for i in range(20):
    sys.stdout.write("#")       #标准输出
    sys.stdout.flush()          #实时刷新
    time.sleep(0.1)             #时间间隔

os模块:

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    #输出用于分割文件路径的字符串
os.name    #输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  #运行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所指向的文件或者目录的最后修改时间

补充:

os.chdir("目标目录")   #修改当前工作目录
os.getcwd()    #获取当前工作目录
os.path.getsize()   #获取文件大小
os.walk()    #分别返回 1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字 

random模块:

random.random()   随机生成0到1之间的随机浮点数
random.uniform(a, b) 随机生成a到b之间的浮点数
random.randint(a,b)  随机生成a到b之间的整数
random.randrange(a,b,n) 随机生成n个a到b之间的整数
random.sample('abcdefghij',3)  多个字符中选取特定数量的字符
random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )  随机选取字符串random.shuffle(items)   items = [1, 2, 3, 4, 5, 6]     洗牌

 示例:

#生成随机验证码
import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print checkcode

 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)    #拷贝文件和状态信息
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)   #递归的去拷贝文件
############例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))##########3
shutil.rmtree(path[, ignore_errors[, onerror]])  #递归的去删除文件
shutil.move(src, dst)  #递归的去移动文件
shutil.make_archive(base_name, format,...)   #创建压缩包并返回文件路径,例如:zip、tar
#base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
#如:www                        =>保存至当前路径
#如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
#format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
#root_dir: 要压缩的文件夹路径(默认当前目录)
#owner: 用户,默认当前用户
#group: 组,默认当前组
#logger: 用于记录日志,通常是logging.Logger对象

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()

 json & pickle 模块:

用于序列化的两个模块:
    json,用于字符串 和 python数据类型间进行转换
    pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps(序列化)、dump、loads(反序列化)、load
pickle模块提供了四个功能:dumps、dump、loads、load
序列化:
import json
f = open('test.txt','w')
a = {'name':'cheng','age':22}
f.write(json.dumps(a))
f.close()
反序列化:
import json
f = open('test.txt','r')
for i in f:
    data = json.loads(i)
    print(data['name'])
re模块:
'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?'     匹配前一个字符1次或0次
'{m}'   匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
 
 
'\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'    匹配字符结尾,同$
'\d'    匹配数字0-9
'\D'    匹配非数字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
 
'(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}
 最常用的匹配语法:
re.match    从头开始匹配
re.search   匹配包含
re.findall  把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub      匹配字符并替换https://www.cnblogs.com/tina-python/p/5508402.html
反斜杠的困扰:  与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。几个匹配模式:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变'.'的行为

os.popen就可以读出执行的内容,popen返回的是file read的对象,对其进行读取使用read()
import os
b = os.popen("dir")
print(b..read()

import os
b = os.popen("dir").read()
print(b)

 

 

方法 描述
         eval()                 将字符串转换为字典    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!