常用模块

一,collections模块

在内置数据类型的基础上,collections模块还提供了几个额外类型:Counter、deque、default、nametuple和OrderedDict

defaultdict、namedtuple和OrderedDict等。

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

3.Counter: 计数器,主要用来计数

4.OrderedDict: 有序字典

5.defaultdict: 带有默认值的字典

namedtuple

# from collections import namedtuple
# Point=namedtuple("Point",["x","y","z"])
# p=Point(2,3,6)
# print(p.y)
# print(p.z)
# print(p)
# card=namedtuple("card",["suits","number"])
# c=card("黑桃",8)
# print(c)
# print(c.suits)

队列(先进先出),queue

#队列
# import queue
# q=queue.Queue()
# q.put([2,3,4])
# q.put(6)
# q.put(7)
# print(q)
# print(q.get())
# print(q.get())
# print(q.get())   #阻塞
# print(q.qsize())
# print(q.qsize())

deque,是为了高效实现插入和操作的双向列表。适合用于队列和栈

# from collections import deque
# dq=deque([1,2])
# dq.append("a")          #从后面放数据
# dq.appendleft("b")      #从前面放数据
# dq.insert(0,"k")        #按索引,放数据
# print(dq.pop())         #从后面取数据
# print(dq.popleft())     #从前面取数据
# print(dq)          #['b', 1, 2]

OrederedDict

# 有序字典
# from collections import OrderedDict
# od=OrderedDict([("a",1),("b",2),("c",3)])
# print(od)              #OrderedDict的key是有序的
# print(od['a'])
# for i in od:
#     print(i)
# od=OrderedDict()
# od["z"]=1
# od["x"]=3
# od["s"]=2
# print(od.keys())       #按照插入的key的顺序返回

defaultdict

from collections import defaultdict
# values = [11, 22, 33,44,55,66,77,88,99,90]
# my_dict=defaultdict(list)
# for value in values:
#     if value>66:
#         my_dict["k1"].append(value)
#     else:
#         my_dict["k2"].append(value)
# print(my_dict)
# dd=defaultdict(lambda :"2")
# dd["key1"]="abc"
# print(dd["key1"])
# dd["key2"]=1        #key不存在返回一个默认值
# print(dd)           

Counter


Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

二,时间模块(time)

#常用方法
tiem.sleep(secs)
#推迟指定的时间运行
time.time()
#获取当前时间戳,以秒为单位

表达时间的三种方式

在python中,通常有这三种方法:时间戳,元组(struct_time)、格式化时间。

(1)时间戳(从1970,1,1开始)float类型

# import time
#时间戳
# print(time.time())

(2)格式化的时间字符串(Format String)

%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
#格式化的时间字符串
# print(time.strftime("%Y-%m-%d%a:%H:%M:%S"))#年-月-日,星期-时-分-秒

(3)元组(struct_time):元组中有九个元素:(年,月,日,时,分,秒,第几周,第几天)

#结构化时间
#
struct_time=time.localtime() # print(struct_time)#time.struct_time(tm_year=2018, tm_mon=1, tm_mday=10, tm_hour=16, tm_min=21, tm_sec=7, tm_wday=2, tm_yday=10, tm_isdst=0
)

三种格式间的转换

# struct_time--(strftime)--->Format string
# Format string--(strptime)--->struct_time
# struct_time--(mktime)--->Timestamp(时间戳)
# Timestamp--(localtime)--->struct_time   (当地时间)
# Timestamp--(gmtime)--->struct_time       (英国当地时间)
#结构化时间<————>字符串时间
# time=time.strftime("%Y-%m-%d",time.localtime(100000000))(“格式化定义”,“结构化时间”)
# print(time)
#time.strptime(时间字符串,字符串对应格式)
# time=time.strptime("2017-03-16","%Y-%m-%d")
# print(time)
# # time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
#时间戳<----->结构化时间
# time=time.gmtime(1500000)
# print(time)
# time_tuple=time.localtime(1500000)
# time=time.mktime(time_tuple)
# print(time)
t=time.asctime(time.localtime(1500000))
print(t)
p=time.ctime()
print(p)

三random模块

# import random
#随机小数
# e=random.random()
# print(e)
# e=random.uniform(2,4)
# print(e)
#随机整数
# e=random.randint(2,4)
# print(e)
# e=random.randrange(2,16,3)       #可设置步长,顾头不顾尾
# print(e)
# e=random.choice([1,2,3,45])         #随机返回一个数
# print(e)
# e=random.sample([1,"23",45,2],3)      #随机返回三个数,可指定返回几个数
# print(e)
#打乱顺序
# item=[1,2,3,4]
# random.shuffle(item)
# print(item)

四,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下为"	
",Linux下为"
"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行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.star('path/filename')获取文件/目录信息的结构说明

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模块是与pyhon解释器交互的一个接口

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

 六,序列化模块

序列化:将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。

1,import  json(dumps,loads,dump,load),json是通用的序列化格式,只有很少的一部分数据类型能够通过json转化成字符串。

内存中的数据类型操作:

dumps,loads

# dic={'k1':1,"k2":2}
# set=str(dic)
# print(type(eval(set)))
# import json
# dic={'k1':1,"k2":2}
# str_dic=json.dumps(dic)              #序列化:将一个字典转换成字符串
# print(type(str_dic),str_dic)         #<class 'str'> {"k2": 2, "k1": 1}
# dic2=json.loads(str_dic)             #反序列化
# print(type(dic2),dic2)               ##<class 'dict'> {'k2': 2, 'k1': 1}
# lis=[1,2,3,4,5]
# str_list=json.dumps(lis)
# print(type(str_list),str_list)         #<class 'str'> [1, 2, 3, 4, 5]

对文件的操作:dump,load

#对文件的操作(dump,load)
# with open("h","w",encoding="utf-8") as f:
#     dic = {'k1': 1, "k2": 2}
#     json.dump(dic,f)
# f=open("h","w",encoding="utf-8")
# dic = {'k1': 1, "k2": 2}
# json.dump(dic,f)         #dump方法接收一个文件句柄,直接将字典转换json字符串写入文件
# f.close()
# f=open("h")
# dic1=json.load(f)         #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
# f.close()
# print(type(dic1),dic1)    #<class 'dict'> {'k2': 2, 'k1': 1}
# dic={2:"中国",6:"ha"}
# f=open("h","w",encoding="utf-8")
# json.dump(dic,f,ensure_ascii=False)
# json.dump(dic,f,ensure_ascii=False)
# f.close()
# f=open("h",encoding="utf-8")
# res1=json.load(f)
# res2=json.load(f)
# f.close()
# print(type(res1),res1)
# print(type(res2),res2)

2,pickle,所有的python中的数据类型都可以转化成字符串形式,但pickle序列化的内容只有python能理解且部分反序列化依赖python代码。

import  pickle(dumps,loads,dump,load)

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
# str_dic=pickle.dumps(dic)
# print(str_dic)            #一串二进制内容
# dic1=pickle.loads(str_dic)
# print(dic1)               #字典
import time
# struct_time=time.localtime(1000000000)
# struct_time1=time.localtime(2000000000)
# f=open("pickle_file","wb")
# pickle.dump(struct_time,f)
# pickle.dump(struct_time1,f)
# f.close()
# f=open("pickle_file","rb")
# struct_time=pickle.load(f)
# struct_time1=pickle.load(f)
# print(struct_time.tm_year)
# print(struct_time.tm_year)
# f.close()
View Code

3,shelve,操作简单,序列化句柄,使用句柄直接操作,非常方便。

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)
View Code
原文地址:https://www.cnblogs.com/glf1160/p/8260169.html