#=================================常用模块========================
# calendar
# time
# datetime
# timeit
# os
# shutil
# zip
# math
# string
# 上述所有模块使用理论上都应该先导入,string是特例
# calendar,time,datetime的区别参考中文意思
#=========================calendar=====================
# 获取一年的日历字符串
import calendar
# calendar()获取某年的日历字符串
# w = 每个日期之间的间隔字符数
# l = 每周所占用的行数
# c = 每个月之间的间隔字符数
n = calendar.calendar(2017,w=0,l=1,c=1)
calendar.prcal(2017) # 直接打印日历
# monthcalendar() 返回一个月每天的矩阵列表
# 格式:calendar.monthcalendar(年,月)
# 回值:二级列表
# 注意:矩阵中没有天数用0表示
m = calendar.monthcalendar(2018, 3)
calendar.isleap(2000) # isleap # 判断某一年是否闰年
calendar.leapdays(2001, 1998) # leapdays # 获取指定年份之间的闰年的个数
# month() 获取某个月的日历字符串
# 格式:calendar.month(年,月)
m = calendar.month(2018, 3)
# monthrange() 获取一个月的周几开始和总天数
# 格式:calendar.monthrange(年,月)
# 回值:元组(周几开始,总天数),可以用x,y表示
# 注意:周默认 0 -6 表示周一到周天
w,t = calendar.monthrange(2017, 3)
# weekday() 获取周几
# 格式:calendar.weekday(年,月,日)
# 返回值:周几对应的数字
calendar.weekday(2018, 3, 26)
#========================time======================
# 一个时间表示,根据不同语言,可以是整数或者浮点数
# 时间戳是从1970年1月1日0时0分0秒到现在经历的秒数
# 32位操作系统能够支持到2038年
#时间元组
# 一个包含时间内容的普通元组
# 索引 内容 属性 值
# 0 年 tm_year XXXX
# 1 月 tm_mon 1~12
# 2 日 tm_mday 1~31
# 3 时 tm_hour 0~23
# 4 分 tm_min 0~59
# 5 秒 tm_sec 0~61 60表示闰秒 61保留值
# 6 周几 tm_wday 0~6
# 7 第几天 tm_yday 1~366
# 8 夏令时 tm_isdst 0,1,-1(表示夏令时)
import time
# timezone # 当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区的是 -28800
print(time.timezone)
# altzone 获取当前时区与UTC时间相差的秒数,在有夏令时的情况下,
print(time.altzone)
print(time.daylight) # daylight 测当前是否是夏令时时间状态, 0 表示是非夏令时
#返回时间元祖
t = time.localtime() # localtime, 得到当前时间的时间结构
print(t.tm_hour) # 可以通过点号操作符得到相应的属性元素的内容
#返回时间戳
time.time() # 得到当前时间的时间戳
time.mktime(time.localtime) # mktime(时间元组) 使用时间元组获取对应的时间戳
# 返回默认字符串化的时间格式 例Tue Jun 6 11:11:00 2017
time.ctime() # ctime # 获取字符串化的当前时间
time.asctime(time.localtime) #asctime(时间元组) 返回元组的正常字符串化之后的时间格式
# clock # 获取cpu时间, 3.0-3.3版本直接使用, 3.6调用有问题
time.clock()
# sleep # 使程序进入睡眠,n秒后继续
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 代表十进制的分钟数)
# %% %号本身
time.strftime("%Y年%m月%d日 %H:%M" , time.localtime()) # 把时间表示成, 2018年3月26日 21:05
#========================datetime======================
#提供日期和时间的运算和表示, 返回字符串化之后的时间格式
import datetime
# datetime常见属性
# datetime.date # 一个理想和的日期,提供year, month, day属性
datetime.date(2018,3,26)
# datetime.time # 提供一个理想和的时间, 具有hour, minute,sec,microsec等内容
datetime.time(12,2,2)
# datetime.datetime # 提供日期跟时间的组合
dt = datetime.datetime(2018, 3, 26[,hour, minute, second, microsecond, tzinfo])
datetime.datetime.today() # 返回当前本地datetime.随着 tzinfo None.
datetime.datetime.now([tz]) # 返回当前本地日期和时间, 如果可选参数tz为None或没有详细说明,这个方法会像today().
datetime.datetime.utcnow() # 返回当前的UTC日期和时间, 如果tzinfo None ,那么与now()类似.
datetime.datetime.fromtimestamp(timestamp[, tz]) # 根据时间戳返回本地的日期和时间.tz指定时区.
datetime.datetime.utcfromtimestamp(timestamp) # 根据时间戳返回 UTC
datetime.datetime.fromordinal(ordinal) # 根据Gregorian ordinal 返回datetime.
datetime.datetime.combine(date, time) # 根据date和time返回一个新的datetime.
datetime.datetime.strptime(date_string, format) # 根据date_string和format返回一个datetime.
#实例方法
dt.date() # 返回相同年月日的date对象.
dt.time() # 返回相同时分秒微秒的time对象.
dt.replace(kw) # kw in [year, month, day, hour, minute, second, microsecond, tzinfo], 与date类似. 类属性
dt.min(MINYEAR, 1, 1) # datetime(MINYEAR, 1, 1).
dt.max(MAXYEAR, 12, 31, 23, 59, 59, 999999) # datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999).
#实例属性(read-only)
dt.year # 1 至 9999
dt.month # 1 至 12
dt.day # 1 至 n
dt.hour # In range(24). 0 至 23
dt.minute # In range(60).
dt.second # In range(60).
dt.microsecond # In range(1000000). `
# datetime.timedelta # 提供一个时间差,时间长度,表示一个时间间隔
t1 = datetime.datetime.now()
td = datetime.timedelta(hours=1) # td表示以小时的时间长度
print( (t1+td).strftime("%Y-%m-%d %H:%M:%S")) # 当前时间加上时间间隔后,得到一个小时后的时间格式化输出
#=========================timeit==========================
# timeit-时间测量工具
import timeit
# 利用timeit调用代码,执行N次,返回运行时间
t1 = timeit.timeit(stmt="[i for i in range(1000)]", number=100000 )
t2 = timeit.timeit(stmt=c, number=100000) # 测量代码c执行100000次运行结果
# timeit 可以执行一个函数,来测量一个函数的执行时间
def doIt():
pass
t3 = timeit.timeit(stmt=doIt,, number=10)
# 测量一个带参数的函数的执行时间
# setup负责把环境变量准备好
# 实际相当于给timeit创造了一个小环境
# 在创作的小环境中, 代码执行的顺序大致是
# '''
# def doIt(num):
# .....
#
# num = 3
#
# doIt(num)
# '''
s = '''
def doIt(num):
for i in range(num):
print("Repeat for {0}".format(i))
'''
t = timeit.timeit("doIt(num)", setup=s+"num=3", number=10)
#=========================os - 操作系统相关==========================
import os
os.getcwd() # 获取当前的工作目录
os.chdir('/home/tlxy') #改变当前的工作目录
os.listdir() # 获取一个目录中所有子目录和文件的名称列表
os.makedirs(a/b/c...) # 当前的工作目录递归创建文件夹
# 格式:os.system(系统命令)
# 返回值:打开一个shell或者终端界面
# 一般推荐使用subprocess代替
rst = os.system("ls") # 返回 0
#getenv() 获取指定的系统环境变量值,
# 格式:os.getenv('环境变量名')
# 返回值:指定环境变量名对应的值
rst = os.getenv("path")
#相应的还有putenv()
os.exit() 退出当前程序
#值部分
os.curdir # curretn dir,当前目录
os.pardir # parent dir, 父亲目录
os.sep # 当前系统的路径分隔符
# windows: ""
# linux: "/"
os.linesep # 当前系统的换行符号
# windows "\r\n"
# unix,linux,macos "\n"
os.name: 当前系统名称
# windows: nt
# mac,unix,linux: posix
#os.path 模块, 跟路径相关的模块
import os.path
os.path.abspath(路径) #将路径转化为绝对路径;返回值:路径的绝对路径形式
os.path.basename(路径) #获取路径中的文件名部分;返回值:文件名字符串
os.path.join(路径1,路径2....,文件名) #将多个路径拼合成一个路径;返回值:组合之后的新路径字符串
os.path.split(路径) #将路径切割为文件夹部分和当前文件部分;返回值:路径和文件名组成的元组
os.path.isdir(路径) #检测是否是目录;返回值:布尔值
os.path.exists(路径) #检测文件或者目录是否存在;返回值:布尔值
#=========================shutil 模块==========================
import shutil
shutil.copy('来源路径','目标路径') #复制文件,返回值:返回目标路径
shutil.copy2('来源路径','目标路径') #同上,区别:保留元数据(文件信息)
shutil.copyfile('源路径','目标路径') #将一个文件中的内容复制到另外一个文件当中,返回目标路径
shutil.move('源路径','目标路径') #移动文件/文件夹,返回目标路径
#归档和压缩
#归档: 把多个文件或者文件夹合并到一个文件当中
#压缩: 用算法把多个文件或者文件夹无损或者有损合并到一个文件当中
shutil.make_archive('归档之后的目录和文件名','后缀','需要归档的文件夹') #归档操作;返回值:归档后的地址
shutil.unpack_archive('归档文件地址','解包之后的地址') #解包操作;返回值:解包之后的地址
#=========================zipfile==========================
import zipfile
# 创建一个ZipFile对象,表示一个zip文件。
#参数file表示文件的路径或类文件对象(file-like object);
#参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示新建一个zip文档或覆盖一个已经存在的zip文档,’a’表示将数据附加到一个现存的zip文档中。
#参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
#获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。
zipfile.getinfo(name)
zipfile.namelist() #获取zip文档内所有文件的名称列表。
#解压zip文档中的所有文件到当前目录。
#参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。
ZipFile.extractall([path[, members[, pwd]]])
#=========================random==========================
import random
random.random() # 返回0-1之间的随机小数
random.choice(序列) # 随机返回序列中的某个值
random.shuffle(列表) # 随机打乱列表
random.randint(a,b) # 返回一个a到b之间的随机整数,包含a和b