常用模块

常用模块

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})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值