3.30
正课
time 模块
import time
时间分为三种格式
-
时间戳
从1970年到现在经历过的秒
print(time.time()) # 1585530854.2276137
用于时间间隔的计算
-
按照某种格式显示的时间,如2020-03-30
print(time.strftime('%Y-%m-%d %H:%M:%S %p')) # 2020-03-30 09:09:53 AM print(time.strftime('今天是%Y年%m月%d日,现在是%H点%M分%S秒%p')) # 今天是2020年03月30日,现在是09点19分32秒AM # %x 当前的日期
用于展示时间
-
结构化的时间
res = time.localtime() print(res.tm_year) # print(res.tm_yday) # 这一年里已经过了多少天 print(res.tm_hour) # 获取当前小时。。。
用于单独获取时间的某一部分
datetime 模块
import datetime
print(datetime.datetime.now())
# 2020-03-30 09:24:16.711104
# 返回这个格式的时间
可以直接用来计算时间,在.timedelta里指定参数
print(datetime.datetime.now() + datetime.timedelta(days=3))
# 三天后的时间
print(datetime.datetime.now() + datetime.timedelta(weeks=3))
# 三周后的时间
时间格式的转换
时间戳,结构化时间,格式化的字符串时间可以互相转换
time.mktime(structtime) # 将格式化时间转换为时间戳
# 结构化时间转时间戳
import time
s_time = time.localtime()
print(s_time)
print(time.mktime(s_time))
# time.(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=9, tm_min=32, tm_sec=9, tm_wday=0, tm_yday=90, tm_isdst=0)
# 1585531929.0
# 时间戳转格式化时间
tp_time = time.time()
print(time.localtime(tp_time))
# 世界时间,gmt时间
print(time.localtime(tp_time))
print(time.gmtime(tp_time))
s_time = time.localtime()
print(s_time)
print(time.strftime('%Y-%m-%d %H:%M:%S %p',s_time)) # struct time在第二个参数
格式化的时间与时间戳互转
当时间存在文件里,读取的时候不是time类型,而是字符串,进行时间计算需要要进行转换
首先将格式化字符串时间转为时间戳
# '2020-03-30 09:38:06'
# 格式化字符串时间先转成结构化时间,再转字符串,再转回来转成格式化字符串时间
# format string -----> struct time-----> timestamp
struct_time=time.strptime('1988-03-03 11:11:11','%Y-%m-%d %H:%M:%S')
# 第一个参数是字符串时间,第二个参数按格式填入%
print(struct_time) # 转成struct time
timestamp=time.mktime(struct_time)+7*86400 # 转成时间戳,加7*86400秒
print(timestamp)
时间戳再转回格式化字符串时间
res=time.strftime('%Y-%m-%d %X',time.localtime(timestamp)) # 先转成struct time,再转成格式化字符串
print(res)
了解
print(time.asctime())
# Mon Mar 30 09:53:04 2020
random模块
import random
print(random.random()) # 随机得到0,1之间的浮点数
print(random.randint(1,3)) # 随机取一个闭区间范围的整数
print(random.randrange(1,3)) # 随机选数字,左闭右开
print(random.choice([1,'aaa',[4,5]])) # 随机得到任意一个元素
print(random.sample([1,3,222,'aaa',[4,5]],3) # 随机取出列表中的指定个元素,放进一个列表
print(random.uniform(1,3)) # 随机得到一个1,3之间的小数
应用:生成随机验证码
# 生成4位数字验证码
import random
print(random.randint(0,9999)) # 4位验证码
# 生成6位字母 + 数字验证码
# 随机得到一个字母,可以随机产生字母的ASCII表中的编码,再转成字母
# chr(65) :'A' chr(90):'Z'
# ord('A'): 65
res = ''
for i in range(6):
s1 = chr(random.randint(65, 90))
s2 = str(random.randint(0, 9))
res += random.choice([s1,s2])
print(res)
# X3I11G
os 模块
import os
os.getcwd() # 获得当前python文件路径
os.chdir('dirname') # 改变当前工作目录
os.rename(oldname,newname) # 重命名文件
os.mkdir('dirname') # 生成空目录
os.removedirs(dirname) # 递归删除所有空目录
os.listdir() # 获取某一个文件夹下所有的子文件以及文件夹的名字
os.path.getsize() # 查看文件大小
os.remove(path) # 删除一个文件
os.system(cmd) # 运行windows命令,在操作系统上运行
print(os.environ) # 查看全部的环境变量
# os.environ 得到一个字典,其中key和value中都是str
os.path 系列
import os
print(os.path.abspath(__file__)) # 得到当前文件的绝对路径,会转换成当前平台的格式
print(__file__) # 与这个用法一样
print(os.path.dirname(path)) # 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.basename(path)) # 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.join((path1[, path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getsize(path) # 返回path 的大小
取上级目录,还是推荐使用,py2,py3都能用
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
python3.5之后,推出了一个新的模块pathlib
from pathlib import Path
res = Path(__file__).parent.parent
sys模块
sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.argv # 命令行参数List,第一个元素是程序本身路径
示例1:使用sys.argv 传入的文件路径对文件进行拷贝操作
示例2:打印进度条功能:
# print('
[%-50s]'%'#',end='') 左对齐,宽度为50,每次打印都从行首开始打印,实现动态显示
# 要真的实现进度条,而不是光打印
# 假设要下载数据
recv_size = 0
total_size = 500000
while recv_size < total_size:
# 模拟每次下载1024个数据
time.sleep(0.01)
recv_size += 1024
# 打印进度条
percent = recv_size / total_size
if percent > 1:
percent = 1
res = int(50*percent)*'#'
print('
[%-50s] %d%%'%(res,percent*100),end='')
改进,写成函数
def progress(percent):
if percent > 1:
percent = 1
shutil 模块
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
# 将文件内容拷贝到另一个文件中
shutil.copyfile('f1.log', 'f2.log') # 目标文件无需存在
...