常用模块
calendar
time
datetime
timeit
os
shutil
zip
math
string
上述所有模块使用理论上都应该先导入,string是特例
calendar,time,datetime的区别参考中文意思
# 使用需要先导入
import calendar
# 参数
# w = 每个日期之间的间隔字符数
# l = 每周所占用的行数
# c = 每个月之间的间隔字符数
cal=calendar.calendar(2019,l=0,c=5)
print(cal)#calendar.prcal(2019)>打印出2019年整个日历
# isleap: 判断某一年是否闰年
calendar.isleap(2000)
=>True
# leapdays: 获取指定年份之间的闰年的个数
calendar.leapdays(2001, 1990)=>-3
# month() 获取某个月的日历字符串
# 格式:calendar.month(年,月)
# 回值:月日历的字符串
m3 = calendar.month(2019, 3)
print(m3)#calendar.prmonth(2019,3)=>打印出2019年3月日历
# monthrange() 获取一个月的周几开始即和天数
# 格式:calendar.monthrange(年,月)
# 回值:元组(周几开始,总天数)
# 注意:周默认 0 -6 表示周一到周天
w,t = calendar.monthrange(2019, 2)
print(w)=>4 #表示周五开始
print(t)=>28
# monthcalendar() 返回一个月每天的矩阵列表
# 格式:calendar.monthcalendar(年,月)
# 回值:二级列表
# 注意:矩阵中没有天数用0表示
m = calendar.monthcalendar(2019, 2)
print(type(m))=><class 'list'>
print(m)=>[[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 0, 0, 0]]
# weekday() 获取周几
# 格式:calendar.weekday(年,月,日)
# 返回值:周几对应的数字
calendar.weekday(2019, 2, 24)=>6#就是周日
time模块
UTC时间–世界协调时间–世界标准时间
中国时间是 UTC+8 东八区
夏令时:夏天的时候将时间调快一小时,每天变成25个小时
时间戳是从1970年1月1日0时0分0秒到现在经历的秒数
#导入时间模块
import time
#当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区的是 -28800
print(time.timezone)=>-28800
# altzone 获取当前时区与UTC时间相差的秒数,在有夏令时的情况下
print(time.altzone)=>-32400
# daylight 测当前是否是夏令时时间状态,
print(time.daylight)=>0
# mktime() 使用时间元组获取对应的时间戳
# 格式:time.mktime(时间元组)
# 返回值:浮点数时间戳
print(time.mktime(time.localtiome())=>1549521329.0
# 得到时间戳
print(time.time())=>1549521329.0355363
# localtime, 得到当前时间的时间结构
# 可以通过点号操作符得到相应的属性元素的内容
t = time.localtime()
print(t.tm_hour)=>14
#asctime() 返回元组的正常字符串化之后的时间格式
# 格式:time.asctime(时间元组)
print(time.asctime(time.localtime()))=>Thu Feb 7 15:14:00 2019
# ctime: 获取字符串化的当前时间,相同
print(time.ctime())=>Thu Feb 7 15:14:00 2019
# sleep: 使程序进入睡眠,n秒后继续
for i in range(10):
print(i)
time.sleep(1)
# 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 的相应符 注1
%S 秒(01 - 61) 注2
%U 一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周 注3
%w 一个星期中的第几天(0 - 6,0 是星期天) 注3
%W 和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%z 用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数)
%% %号本身
'''
# 把时间表示成,2019年02月07日 19时44分18秒
ft = time.strftime('%Y{y}%m{m}%d{d} %H{h}%M{f}%S{s}').format(y='年', m='月', d='日', h='时', f='分', s='秒')
print(ft)=>2019年02月07日 19时44分18秒
datetime模块
提供日期和时间的运算和表示
import time
import datetime
dt = datetime.date(2019, 3,26)
print(dt)=>2019-03-26
#显示时间
from datetime import datetime
print(dt.today())=>2019-02-11 13:30:52.068131
print(dt.now())=>2019-02-11 13:30:52.068131
print(dt.utcnow())=>2019-02-11 05:30:52.068131
#从时间戳中返回本地时间
print(dt.fromtimestamp(time.time()))=>2019-02-11 05:30:52.068131
# 表示一个时间间隔
from datetime import datetime, timedelta
dt=datetime.now()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))=>2019-02-11 13:56:22
# td表示以小时的时间长度
td = timedelta(hours=1)
print(timedelta(hours=1))=>1:00:00
# 当前时间加上时间间隔后,把得到的一个小时后的时间格式化输出
print((dt+td)..strftime("%Y-%m-%d %H:%M:%S"))=>2019-02-11 14:56:22
# 测量程序运行时间间隔实验
def p():
time.sleep(3.6)
t1 = time.time()
p()
print(time.time() - t1)=>3.600997447967529
# timeit-时间测量工具
import timeit
c='''
sum = []
for i in range(100):
sum.append(i)
'''
t1= timeit.timeit(stmt="[i for i in range(1000)]", number=10000 )
t2 = timeit.timeit(stmt=c, number=10000)
print(t1)=>0.4090758083590822
print(t2)=>0.07397114205392696
os - 操作系统相关
import os
# getcwd() 获取当前的工作目录
print(os.getcwd())=>C:\Users\DDD\CookBook_and_code-master
# chdir() 改变当前的工作目录
os.chdir('C:\Users\DDD')
print(os.getcwd())=>C:\Users\DDD
# listdir() 获取一个目录中所有子目录和文件的名称列表
print(os.listdir())
# makedirs() 递归创建文件夹
# 格式:os.makedirs(递归路径)
# 返回值:无
# 递归路径:多个文件夹层层包含的路径就是递归路径 例如 a/b/c...
os.makedirs("linshi")
=>创建了名叫linshi的文件夹
# system() 运行系统shell命令
# 格式:os.system(系统命令)
# 返回值:打开一个shell或者终端界面
# 一般推荐使用subprocess代替
# ls是列出当前文件和文件夹的系统命令
rst = os.system("ls")
print(rst)=>1
# 在当前目录下创建一个xiaoxiong.haha 的文集
rst = os.system("touch xiaoxiong.haha")
print(rst)=>1
#getenv() 获取指定的系统环境变量值
# 相应的还有putenv
# 格式:os.getenv('环境变量名')
# 返回值:指定环境变量名对应的值
rst = os.getenv("PATH")
print(rst)
值部分
print(os.pardir)=>.. #当前目录
print(os.curdir)=>. # 父亲目录
print(os.sep)=>/ #当前系统的路径分隔符
print(os.linesep)=> #换行
path = "/home/tlxy" + "/" + "xiaoxiong"
print(path)=>/home/tlxy/xiaoxiong
#操作系统的名称
print(os.name)=>nt # windows
=>posix #linux
# abspath() 将路径转化为绝对路径
# 格式:os.path.abspath('路径')
print(os.path.abspath(".."))=> 父目录
print(os.path.abspath("."))=> 当前目录
# basename() 获取路径中的文件名部分
# 格式:os.path.basename(路径)
# 返回值:文件名字符串
print(os.path.basename("\DDD")
# join() 将多个路径拼合成一个路径
# 格式:os.path.join(路径1,路径2....)
# 返回值:组合之后的新路径字符串
bd = "/home/tlxy"
fn = "dana.haha"
p = op.join(bd, fn)
print(p)=>/home/tlxy/dana.haha
# split() 将路径切割为文件夹部分和当前文件部分
# 格式:os.path.split(路径)
# 返回值:路径和文件名组成的元组
t = op.split("/home/tlxy/dana.haha")
print(t)=>('/home/tlxy', 'dana.haha')
d,p = op.split("/home/tlxy/dana.haha")
print(d, p)=>/home/tlxy dana.haha
# isdir() 检测是否是目录
# 格式:os.path.isdir(路径)
# 返回值:布尔值
# exists() 检测文件或者目录是否存在
# 格式:os.path.exists(路径)
# 返回值:布尔值
shutil 模块
import shutil
# copy() 复制文件
# 格式:shutil.copy(来源路径,目标路径)
# 返回值:返回目标路径
# 拷贝的同时,可以给文件重命名
print(shutil.copy("/home/tlxy/dana.haha", "/home/tlxy/haha.haha"))=>/home/tlxy/haha.haha
# copy2() 复制文件,保留元数据(文件信息)
# 格式:shutil.copy2(来源路径,目标路径)
# 返回值:返回目标路径
# 注意:copy和copy2的唯一区别在于copy2复制文件时尽量保留元数据
# copyfile()将一个文件中的内容复制到另外一个文件当中
# 格式:shutil.copyfile('源路径','目标路径')
# 返回值:无
shutil.copyfile("dana.haha", "haha.haha")
# move() 移动文件/文件夹
# 格式:shutil.move(源路径,目标路径)
# 返回值:目标路径!
shutil.move("/home/tlxy/dana.haha", "/home/tlxy/dana")
归档和压缩
归档: 把多个文件或者文件夹合并到一个文件当中
压缩: 用算法把多个文件或者文件夹无损或者有损合并到一个文件当中
# make_archive() 归档操作
# 格式:shutil.make_archive('归档之后的目录和文件名','后缀','需要归档的文件夹')
# 返回值:归档之后的地址
rst=shutil.make_archive("/home/tlxy/tuling", "zip", "/home/tlxy/dana")
print(rst)=>/home/tlxy/tuling.zip
# unpack_archive() 解包操作
# 格式:shutil.unpack_archive('归档文件地址','解包之后的地址')
# 返回值:解包之后的地址
zip - 压缩包
import zipfile
#创建一个ZipFile对象,表示一个zip文件。
zf = zipfile.ZipFile("/home/xiaoxiong.zip")
#ZipFile.getinfo(name):
# 获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。
zf.getinfo("dana.haha")
# ZipFile.namelist()
# 获取zip文档内所有文件的名称列表。
zf.namelist()
# ZipFile.extractall([path[, members[, pwd]]])
# 解压zip文档中的所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。
zf.extractall("/home/tlxy/dana")
zip
把两个可迭代内容生成一个可迭代的tuple元素类型组成的内容
l1=[1,2,3,4,5,66]
l2=[11,22,33,44,55]
z=zip(l1,l2)
print([i for i in z])=>[(1, 11), (2, 22), (3, 33), (4, 44), (5, 55)]
enumerate
跟zip功能比较像
对可迭代对象里的每一元素,配上一个索引,然后索引和内容构成tuple类型
l1=[1,2,3,4,5,66]
em=enumerate(l1)
print([i for i in em])=>[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 66)]
en=enumerate(l1,start=100)
print([i for i in en])=>[(100, 1), (101, 2), (102, 3), (103, 4), (104, 5), (105, 66)]
random
import random
# random() 获取0-1之间的随机小数
# 格式:random.random()
# 返回值:随机0-1之间的小数
# choice() 随机返回序列中的某个值
# 格式:random.choice(序列)
# 返回值:序列中的某个值
l=[i for i in range(10)]
print(random.choice(l))
# shuffle() 随机打乱列表
# 格式:random.shuffle(列表)
# 返回值:none
l=[i for i in range(10)]
print(l)=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(l)
print(l)=>[4, 7, 6, 3, 5, 0, 2, 1, 9, 8]
# randint(a,b): 返回一个a到b之间的随机整数,包含a和b
print(random.randint(0,100))
collections模块
namedtuple
tuple类型,是一个可命名的tuple
import collections
Point=collections.namedtuple("Point5",['x','y'])
p=Point(12,23)
print(p)=>Point5(x=12, y=23)
print(p.x,p.y)=>12 23
print(p[0],p[1])=>12 23
dequeue
比较方便的解决了频繁删除插入带来的效率问题
from collections import deque
q = deque(['a', 'b', 'c'])
print(q)=>deque(['a', 'b', 'c'])
q.append("d")
print(q)=>deque(['a', 'b', 'c', 'd'])
q.appendleft('x')
print(q)=>deque(['x', 'a', 'b', 'c', 'd'])
defaultdict
当直接读取dict不存在的属性时,直接返回默认值
from collections import defaultdict
# lambda表达式,直接返回字符串
func = lambda: "小熊"
d2 = defaultdict(func)
d2["one"] = 1
d2["two"] = 2
print(d2['one'])=>1
print(d2['four'])=>小熊
Counter
from collections import Counter
c=Counter("asdasdaosjdhoiasjdofia")
print(c)=>Counter({'a': 5, 's': 4, 'd': 4, 'o': 3, 'j': 2, 'i': 2, 'h': 1, 'f': 1})
s=Counter(["abc","abc","abc","d"])
print(s)=>Counter({'abc': 3, 'd': 1})