一大群模块

什么是模块?

   常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

   但其实import加载的模块分为四个通用类别: 

  1 使用python编写的代码(.py文件)

  2 已被编译为共享库或DLL的C或C++扩展

  3 包好一组模块的包

  4 使用C编写并链接到python解释器的内置模块

为何要使用模块?

   如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

    随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

                          collections模块

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

namedtuple

from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print(p.x,p.y)
print(p.y)

Circle = namedtuple('Cirle',['x','y','r'])
c = Circle(1,2,3)
print(c)
print(c.y)

deque
队列
import queue
q = queue.Queue()
q.put(10)
q.put(5)
q.put(6)
print(q)
print(q.get())
print(q.get())
print(q.get())
双端队列
from collections import deque
q = deque([1,2])
q.append('a') #从后面添加数据
print(q)
q.appendleft('b') #从前面添加数据
print(q)
print(q.pop()) #从后面取数据
print(q.popleft()) #从前面取数据
q.insert(1,5) #插队
print(q)

一个字典使用了OrderedDict以后就会变得有序
from collections import OrderedDict
d = dict([('a',1),('b',2),('c',3)])
print(d)
od = dict(OrderedDict([('a',1),('b',2),('c',3)]))
print(od)
注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
print(od.keys()) # 按照插入的Key的顺序返回

defaultdict用它的原因在于,一般在循环当中给key增加值的时候,首先要判断这个key是否存在在
使用defaultdict不需要判断,可以直接增加
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list) #defaultdict后面可以放数据类型的参数
for value in values: #放入后再次创建的key默认对应的value就是这个参数
if value>66:
my_dict['k1'].append(value)
elif value<66:
my_dict['k2'].append(value)
print(my_dict)
defaultdict(这里一般只能放能够被调用的,比如list),假如想放个数字,那就。
defaultdict(lambda : 5)就是把数字5放了进去


Counter
Counter计算用的,可以计算某个字符串里面某个元素出现的次数,以字典形式返回

time模块
表示时间的三种方式
时间戳(timestamp)
格式化的时间字符串(Format String): ‘1999-12-06’
元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
import time
time.sleep() #sleep后面可以放参数,以秒为单位,比如放个3表示在这里停顿3秒
time.time() #时间戳,通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
#我们运行“type(time.time())”,返回的是float类型。
print(time.strftime("%Y-%m-%d %H:%M:%S")) #格式化输出
时间元组:localtime将一个时间戳转换为当前时区的struct_time
print(time.localtime())
时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
时间戳-->结构化时间
time.gmtime(时间戳) #UTC时间,与英国伦敦当地时间一致
time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间
print(time.gmtime(1500000000)) #里面可以放参数,参数的意思是从1970年开始距今的秒数
print(time.localtime(1500000000))
结构化时间-->时间戳 
time.mktime(结构化时间)
time_tuple = time.localtime(1500000000)
print(time_tuple)
print(time.mktime(time_tuple))




计算时间差
import time
true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))
time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))
dif_time=time_now-true_time
struct_time=time.gmtime(dif_time)
print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,
struct_time.tm_mday-1,struct_time.tm_hour,
struct_time.tm_min,struct_time.tm_sec))

import time
print(time.ctime()) #如果不传参数返回的是当前的时间格式化


random模块
import random
print(random.random()) #随机小数,大于0且小于1之间的小数
print(random.uniform(1,3)) #大于1小于3的小数
print(random.randint(1,4)) #大于等于1且小于等于4之间的整数
print(random.randrange(1,10,2))# 大于等于1且小于10之间的奇数
print(random.choice([1,'23',[4,5]]))#随机选择一个返回,1或者23或者[4,5]
print(random.sample([1,'23',[4,5]],2))#以列表元素形式输出任意2个组合

item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序
print(item)

生成随机验证码
import random
def v_code():
code = ''
for i in range(6):
num=random.randint(0,9)
alf=chr(random.randint(65,90))
add=random.choice([num,alf])
code=''.join([code,str(add)])
return code
print(v_code())


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.stat('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模块是与python解释器交互的一个接口
import sys
print(sys.platform) #查看操作系统平台名称
print(sys.version) #查看python解释器的版本
print(sys.exit(1)) #退出程序,正常退出时exit(0),错误退出exit(1)
#只有操作系统能感知到正常还是错误退出
print(sys.path) #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

print(sys.argv) #这个不知道怎么记,但是很重要
 






原文地址:https://www.cnblogs.com/ddjl/p/8261018.html