Time 模块
导入
import time
常用函数
函数 | 功能 |
---|---|
time.sleep([n]) | 休眠n秒,线程推迟指定时间运行 (阻塞函数,程序将在此处停止) |
time.time() | 返回当前时间戳(1970.0 0点起)单位为秒(浮点型) |
time.localtime([sec]) | 将一个时间戳转化为一个当前时区的struct_time(未提供参数,为当前时间) |
time.gmtime([sec]) | 和localtime类似,区别为将时间戳转化为UTC时区(0时区)的struct_time |
time.mktime(t) | 将time.struct_time转化为时间戳 |
time.asctime([t]) | 将时间的元组或struct_time 表示为:‘Sun(星期) July(月份) 26(日期) 09:10:02(时间) 2019(年份)’,未传参数,默认time.locatime() |
time.ctime([t]) | 把时间戳转化为time.asctime()的格式,默认time.time() |
time.stftime(format[,t]) | 把一个代表时间的元组/struct_time(locatime(),gmtime())转化为格式化字符串,未传参数,默认为time.localtime() |
time.strptime() | 将格式化字符串转换为struct_time的格式 |
在python中表示时间的方式:
- 时间戳(timetamp):表示从1970.01.01 00:00:00开始按秒计算的偏移量,计算机识别
- 格式化的时间字符串(format string),可以便于人获取时间
- 结构化的时间(struct_time)---->结构元组,9个元素(年月日,时分秒,一年的第几周,第几天,夏令时),可以对时间操作
import time
print(time.time())
print(time.strftime('%Y-%m-%d %X %p'))
print(time.localtime()[:])
1564102814.5391111
2019-07-26 09:00:14 AM
(2019, 7, 26, 9, 0, 14, 4, 207, 0)
字符串时间的符号
符号 | 含义 |
---|---|
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
时间格式的转化
时间戳转化我结构化时间
import time
now=time.time()
print(time.gmtime(now)) ##0时区
print(time.localtime(now)) ##当地时区(东八区)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=20, tm_sec=55, tm_wday=4, tm_yday=207, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=20, tm_sec=55, tm_wday=4, tm_yday=207, tm_isdst=0)
结构化时间转化为时间戳
import time
sp_struct=time.localtime()
print(time.time(),time.mktime(sp_struct))
1564104250.1320517 1564104250.0
结构化时间转化为字符串时间
import time
tp_struct=time.localtime()
print(time.strftime('%Y-%m-%d %X',tp_struct))
2019-07-26 09:27:23
字符串时间转化为结构化数据
import time
print(time.strptime('2019-07-26 09:30:01','%Y-%m-%d %X'))
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=30, tm_sec=1, tm_wday=4, tm_yday=207, tm_isdst=-1)
结构化时间及时间戳转换成字符串(另一形式)
import time
tp_struct=time.localtime()
print(time.asctime(tp_struct)) ##结构化时间
print(time.ctime(time.time())) ##时间戳
Fri Jul 26 09:49:21 2019
Fri Jul 26 09:49:21 2019
datetime 模块
与time模块比较而言,datetime模块接口更直观,更容易调用
方法(类) | 描述 |
---|---|
datetime.date | 表示日期(类),常用属性 year month day |
datetime.time | 表示时间(类),常用属性 hour,minute,second,microsecond(微秒) |
datetime.datetime | 表示日期 |
datetime.timedelta | 表示时间间隔 |
datetime.tzinfo | 与时区有关的信息 |
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 26, 10, 4, 42, 700190)
>>> datetime.datetime.now().date()
datetime.date(2019, 7, 26)
>>> datetime.datetime.now().time()
datetime.time(10, 5, 30, 9043)
>>> print(datetime.datetime.now())
2019-07-26 10:05:50.047827
>>> print(datetime.datetime.now()+datetime.timedelta(hours=1)) #1小数以后
2019-07-26 11:07:17.392208
sys 模块
sys模块是与python解释器交互的一个接口
处理命令行参数
在解释器启动后,argv列表包含了传递脚本的所有参数,列表的第一个元素是脚本的名称
函数 | 作用(返回值) |
---|---|
byteorder | python解释器有关的版本信息 |
copyright | python解释器在磁盘的存储路径 |
executable | 当前系统上保存文件所用的字符集 |
getfilesstemencoding | python整数支持的最大值 |
maxsize | python解释器所在版本信息 |
platform | python解释器的版本信息 |
version | python解释器的主版本号 |
>>> sys.version #python的版本
'3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]'
>>> sys.path #python的环境
['', 'D:\\python\\python3.7\\Lib\\idlelib', 'D:\\python\\python3.7\\python37.zip', 'D:\\python\\python3.7\\DLLs', 'D:\\python\\python3.7\\lib', 'D:\\python\\python3.7', 'D:\\python\\python3.7\\lib\\site-packages']
##第一个''表示当前的运行,由于在终端所有为空
通过sys.path.append(地址),可以添加一个.py文件到环境里,之后可以直接import调用
序列化模块
概念
将一个对象(数据)从内存中转换成可存储(字符串类型)或者可传输(bytes)类型的过程
python 中叫pickling
作用
- 持久化数据类型
- 跨平台交互使用
- 使程序更易于维护
json
json格式在各个语言中都可以通用的序列化格式.在json中,所有的字符串只能使用""(双引号).
json类型 | python类型 |
---|---|
{} | 字典(dict) |
[] | 列表(list) |
123/1.1 | int/float(数字) |
true/false | True/False(bool) |
null | None |
优缺点
-
优点:所有数据类型支持多种语言
-
缺点
- 支持数据类型较少
- 对于数据类型要求严格
- 对于字典,其键只能是字符串,非字符串(数字)会强转成字符串
- 只支持字典,列表,数字,布尔型
功能
- dumps loads
import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
sr_dic=json.dumps(dic) ##序列化,将字典转化为一个字符串
print(sr_dic,type(sr_dic))
sr=json.loads(sr_dic)#反序列化,将字符串转化成一个字典
print(sr,type(sr))
{"name": "bob", "age": 16, "job": "student", "2": "a"} <class 'str'>
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>
如果是元组,序列化时强转为列表;若元组作为字典的键序列化时报错
- dump load
如果直接把数据类型直接序列化写入文件,可以用dump和load
import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
with open('dump_json','w') as f:
json.dump(dic,f)##dump方法可以接收一个文件句柄。直接将字典转化字符串并写入文件中
with open('dump_json') as f:
ret=json.load(f)
print(ret,type(ret))
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>
在与该.py文件同级生成了一个dump—json文件
{"name": "bob", "age": 16, "job": "student", "2": "a"}
#用txt打开该文件
json自带解码方式,如果内容含中文,会出现乱码,所有可以关闭其解码
import json
dic2={'名字':'bob','年龄':17}
print(json.dumps(dic2))
print(json.dumps(dic2,ensure_ascii=False))
{"\u540d\u5b57": "bob", "\u5e74\u9f84": 17}
{"名字": "bob", "年龄": 17}
pickle
该数据结构只支持python
内存中结构化的数据<---->格式pickle<---->bytes类型<---->保存在文件或基于网络传输
优缺点
-
优点
- 支持python中几乎所有类型
- pickle会把数据类型序列化为bytes类型
-
缺点
- 只支持python
功能
-
序列化
- dumps
- dump
-
反序列化a
- loads
- load
dumps和loads
import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
dic_d=pickle.dumps(dic)
print(dic_d,type(dic_d))
dic_l=pickle.loads(dic_d)
print(dic_l,type(dic_l))
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x03\x00\x00\x00ageq\x03K\x10X\x03\x00\x00\x00jobq\x04X\x07\x00\x00\x00studentq\x05K\x02X\x01\x00\x00\x00aq\x06u.' <class 'bytes'> ###保存格式为2进制
{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'} <class 'dict'>
dump和load
import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
with open('dump_pickle','wb')as f:
pickle.dump(dic,f)
with open('dump_pickle','rb') as f:
tu=pickle.load(f)
print(tu)
{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'}
pickle.dump()后会以2进制保存,mode用’w’和’r’时会报错,‘write() argument must be str, not bytes’。要用’wb’和’wr’。'b’时的错误:‘gbk’ codec can’t decode byte 0x80 in position 0: illegal multibyte sequence
€}q(XnameqXbobqXageqKXjobqXstudentqKXaqu.
txt格式打开dump_pickle