首页 > 代码库 > python---常用模块

python---常用模块

# 什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加.py的后缀
# import 加载的模块分四个同于类别
# 1.使用python编写的代码(.py文件)
# 2.已被编译为共享库或DLL的c或c++扩展
# 3.包好一组 模块的包
# 4.使用c编程写并连接到python解释器的内置模块

#常用模块
#在内置数据类型(dict,list,set,tuple)的基础上,collestions模块提供了几个额外的数据类型:
#Counter,deque,defaultdict,namedtuple和OrderedDict
#1.namedtuple:生成可以使用名字来访问元素内容的tuple
#2.deque:双端队列,可以快速的从另外一侧追加和退出对象
#3.Counter:计数器,主要用来计数
#4.OrderedDict:有序字典
#5.defaultdict:带默认值的字典
#collections模块

tuple   #可表示不变集合
#namedtuple     #可命名元组    (如果要用坐标和半径表示一个圆,可以用namedtuple)
# from collections import namedtuple     #从进口namedtuple集合
# Point=namedtuple(Point,[x,y])
# p=Point(1,2)
# print(p.x,p.y)
#
# #deque   双队列     (是为了高效实现插入和删除操作的双向类表,适用于队列和栈)
#deque  除了四线list的append()和pop()外,还支持appendleft()和popleft(),这样就能高效的添加和删除元素了
# from collections import deque
# q=deque([a,b,c])
# q.append(x)   #追加至后
# q.appendleft(y)   # =添加至前
# print(q)


#  OrderedDict  #有序字典
#使用dict时,key是无须的,在对dict做迭代时,可以的值无法确定顺序
#如要保持可以的顺序,可以用OrderedDict
# from collections import OrderedDict
# d=OrderedDict([(a,1),(b,2),(c,3)])   #key是有序的
# print(d)
# d1=dict([(a,1),(b,2),(c,3)])   #key是无序的
# print(d1)
#OrderedDict的key会按照插入的顺序排列,不是key本身排列
#例如
# from collections import OrderedDict
# ##d=OrderedDict([(a,1),(b,2),(c,3)])
# d2=OrderedDict()
# d2[z]=1
# d2[y]=2
# d2[x]=3
# ##print(d)
# print(d2.keys())   #按照插入的key的顺序返回

#defaultdict
#原生字典解决方法
# value=[11,22,33,44,55,66,77,88,99,100]
# dict={k1:[],k2:[]}
# for i in value:
#     if i<66:
#         dict[k1].append(i)
#     else:
#         dict[k2].append(i)
# print(dict)

#defaultdict字典解决方法
# from collections import defaultdict
# value=[11,22,33,44,55,66,77,88,99,100]
# dict=defaultdict(list)
# for item in value:
#     if item>66:
#         dict[k1].append(item)
#     else:
#         dict[k2].append(item)
# print(dict)

#使用dict时,如果引用的key不存在,就会抛出keyError,如果希望key不存在时,返回一个默认值,就可以
#用defaultdict


#Counter  计算值出现的次数,无序的容器类型,以字典的键值对形式储存,其中元素作为key
#其技术作为value,技术值可以是任意的interger(包括0和负数)

# a=Counter(aaaffffvvvvxx)
# print(a)

#########re#########
# #re模块
#1、验证手机号是否合法
# while True:
    # phone_number=input(请输入手机号:)
    # if len(phone_number)==11 and phone_number.isdigit()    #     and phone_number.startswith(13)    #     or phone_number.startswith(14)     #     or phone_number.startswith(15)    #     or phone_number.startswith(17)     #     or phone_number.startswith(18):
    #     print(手机号合法)
    # else:
    #     print(手机号不行)
#2、验证手机是否合法
# import re
# phone_nuber=input(输入手机号:)
# if re.match(^(13|14|15|18)[0-9]{9}$,phone_nuber):
#     print(合法手机号)
# else:
#     print(不合法手机号)

#re模块和正则表达式
##正则表达式不仅在python领域中,在整个编程界都有举足轻重的地位
#正则表达式本身就是匹配字符串内容的一种规则
#正则表达式是对字符串操作的一种逻辑公式,就是是先定义号的一些特定字符、这些特定字符的组合
#,组成一个“规则字符串”,这个“规则字符串”用来哦表达对字符串的一种过滤逻辑
##正则表达式
#字符组:在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
#字符分为很多种类,如数字,字母,标点等等

#re模块下的常用方法
import re
ret=re.findall(a,eva egon yuan)  #返回所有满足匹配条件的结果,放在列表里
print(ret)

ret=re.search(a,eva egon yuan).group()
print(ret)
##函数会在字符串内查找模式匹配5时时时身上ss,只要找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()
#方法得到匹配的字符串,如果字符串没有匹配,则返回None

ret=re.match(a,abc).group()    #同search,不过在字符串开始处进行匹配
print(ret)

ret=re.split([ab],abcd)  #先按a分隔,再按b分隔
print(ret)

ret=re.sub(\d,H,eva3egon4yuan5,1)#将数字替换成H,参数1表示之替换一个
print(ret)

ret=re.subn(\d,H,eva3egon4yuan4) #将数字替换成H,返回元组
print(ret)

a=re.compile(\d{3})  #将正则表达式编译成一个正则表达式对象,匹配3个数字
ret=a.search(abc123eee)#正则表达式对象调用search,参数为待匹配的字符串
print(ret)

import re
ret=re.findall(\d,ds3sy4784a)   #findall返回一个存放匹配结果的迭代器
print(ret)  #<callable_iterator object at 0x10195f940>
print(next(ret).group())  #查看第一个结果
print(next(ret).group())  #查看第二个结果
print([i.group() for i in ret])  #查看剩余的左右结果


#findall优先级查询
import re

ret = re.findall(www.(baidu|oldboy).com, www.oldboy.com)
print(ret)  # [oldboy]     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可

ret = re.findall(www.(?:baidu|oldboy).com, www.oldboy.com)
print(ret)  # [www.oldboy.com]

#split的优先级查询
ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : [eva, egon, yuan]

ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : [eva, 3, egon, 4, yuan]

#在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。
#! usr/bin/env python
# -*- coding: utf-8 -*-
#常用方法
# import time
# #time.sleep(secs)   #(线程)推迟指定的时间运行。单位为秒。
# time.time()   #获取当前时间戳
表示时间的三种方式    时间戳(timestamp),元组(struce_time),格式化时间字符串(format String):

import time    #时间模块
#时间戳
time.time()
#时间字符串
ret=time.strftime(%Y-%m-%d %X)   # 表示年月日   %X表示时分秒
print(ret)

import time
#格式时间字符串
ret=time.strftime(%H-%M-%S)     #表示时分秒
print(ret)
#时间元组:localtime将一个时间戳转换为当前时区的struct_time
time.localtime()
time.struct_time(tm_year=2017,tm_mon=7,tm_mday=24,
                 tm_hour=13,tm_min=59,tm_sec=37,
                 tm_wday=0,tm_yday=205,tm_isdst=0)

#几种格式化之间的转换
#时间戳--->结构化时间
time.gmtime(时间戳)   #UCT时间
time.localtime(时间戳)  #当地时间
time.gmtime(15000000000)
time.struct_time(tm_year=2017,tm_mon=7,tm_mday=14,tm_hour=2,tm_min=40,tm_sec=0,tm_wday=4,tm_yday=195,tm_isdst=0)
time.localtime(15000000000)
time.struct_time(tm_year=2017,tm_mon=7,tm_mday=14,tm_huor=10,tm_min=40,tm_sec=0,tm_wday=4,tm_yday=195,tm_isdst=0)

#结构化时间--->时间戳
time.mktime(结构化时间)
time_tuple=time.localtime(1500000000)
time.mktime(time_tuple)


#结构化时间---->字符串时间
#time.strftime(格式化,‘结构化时间’) #结构化时间参数若不转,则实现当前时间
time.strftime(2017-3-15,%Y-%m-%d  %X)
time.strftime(%Y-%m-%d,time.localtime(1500000000))


#字符串时间---->结构化时间
time.strptime(2017-03-16,%Y-%m-%d)
time.srtptime(时间字符串,字符串对应格式)
time.strptime(tm_year=2017,tm_mon=7,tm_mday=15,tm_hour=10,tm_min=46,tm_sec=22,tm_wday=3,tm_yday=75,tm_isdst=-1)
time.strptime(07/24/2017,%m%d%Y)
time.struce_time(tm_year=2017,tm_mon=7,tm_mday=24,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=0,tm_yday=205,tm_isdst=-1)

#结构化时间------>%a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间)#如果不传参数,直接返回当前时间的格式化串
time.asctime(time.localtime(15000000000))
time.asctime()

#%a %d %d %H:%M:%S %Y串--->结构化时间
#time.ctime(时间戳) 如果不传参,直接返回当前时间的格式化串
time.ctime()
time.ctime(1500000000)


#random模块
import random
#随机小数
random._urandom()   #大于0且小于1之间的小数
random.uniform(1,3)  #大于1小于3的小数

#随机整数
random.randint(1,5)   #大于1且小于等于5之间的整数
random.randrange(1,10,2)  #大于等于1且小于3之间的整数

#随机选择一个返回
random.choice([1,23,[4,5]])   #1或者23或者[4,5]
#随机选择多个返回,返回的个数为函数的第二个参数
random.sample([1,23,[4,5]],2)   #列表元素任意两个组合

#打乱列表顺序
item=[1,3,5,7,9]
random.shuffle(time)  #打乱次序
item
random.shuffle(item)
item

#练习生成随机验证码
import random
def code1():
    code=‘‘
    for i in range(5):
        num=random.randint(0,9)
        alf=chr(random.randint(65,90))
        aef=random.randint(91,122)
        add=random.choice([num,alf,aef])
        code=‘‘.join([code,str(add)])
    return code
print(code1())


#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的大小


‘‘‘
#注:os.stat(path/filenanme)获取文件/目录信息的结构说明
# stat 结构:
#
# st_mode: inode 保护模式
# st_ino: inode 节点号。
# st_dev: inode 驻留的设备。
# st_nlink: inode 的链接数。
# st_uid: 所有者的用户ID。
# st_gid: 所有者的组ID。
# st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
# st_atime: 上次访问的时间。
# st_mtime: 最后一次修改的时间。
# st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。


#sys模块
#sys模块是否与python解释器交互的一个接口
# sys.argv           命令行参数List,第一个元素是程序本身路径
# sys.exit(n)        退出程序,正常退出时exit(0)
# sys.version        获取Python解释程序的版本信息
# sys.maxint         最大的Int值
# sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
# sys.platform       返回操作系统平台名称


#序列化模块
#什么叫序列化-----将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
#序列化的目的
#1.以某种存储形式自定义对象持久化
#2.将对象从一个地方递到另一个地方
#3.使程序更具维护性。



技术分享

 





#json 模块提供了四个功能:dumps、dump、loads、load #loads和dumps import json dic
={k1:v1,k2:v2,k3:v3} str_idc=json.dumps(dic) #序列化:将一个字典转换成一个字符串 print(type(str_idc),str_idc) #注:json转换完的字符串类型的字典中的字符串是由“”表示的 #dic2=json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典 #注要用json的loads功能处理的字符串类型的字典中的字符串必须由“”表示 #print(type(dic2),dic2) list_dic = [1,[a,b,c],3,{k1:v1,k2:v2}] str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 print(type(str_dic),str_dic) #<class str> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] list_dic2 = json.loads(str_dic) print(type(list_dic2),list_dic2) #<class list> [1, [a, b, c], 3, {k1: v1, k2: v2}] #load和dump import json f = open(json_file,w) dic = {k1:v1,k2:v2,k3:v3} json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 f.close() f = open(json_file) dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 f.close() print(type(dic2),dic2) #pickle #json & pickle 模块 #用于序列化的两个模块 # *json,用于字符串和python数据类型件进行转换 # *pickle,用于python特有的类型和python的数据类型jian进行转换 #pickle模块了四个功能:dumps、dump(序列化,存),loads(反序列化,读),load(不仅可以序列化字典、列表,,,,可以吧python中任意的数据类型序列化) import pickle dic = {k1:v1,k2:v2,k3:v3} str_dic = pickle.dumps(dic) print(str_dic) #一串二进制内容 dic2 = pickle.loads(str_dic) print(dic2) #字典 import time struct_time = time.localtime(1000000000) print(struct_time) f = open(pickle_file,wb) pickle.dump(struct_time,f) f.close() f = open(pickle_file,rb) struct_time2 = pickle.load(f) print(struct_time.tm_year) #shelve #shelve是python提供给我们的序列化工具 import shelve f = shelve.open(shelve_file) f[key] = {int:10, float:9.5, string:Sample data} #直接对文件句柄操作,就可以存入数据 f.close() import shelve f1 = shelve.open(shelve_file) existing = f1[key] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错 f1.close() print(existing) #shelve只读 import shelve f = shelve.open(shelve_file, flag=r) existing = f[key] f.close() print(existing) #设置writeback import shelve f1 = shelve.open(shelve_file) print(f1[key]) f1[key][new_value] = this was not here before f1.close() f2 = shelve.open(shelve_file, writeback=True) print(f2[key]) f2[key][new_value] = this was not here before f2.close()


#模块博客:http://www.cnblogs.com/Eva-J/articles/7228075.html

 

python---常用模块