time模块
import time
time.sleep([n]) #休眠N s
time.time() #获取当前时间戳,从1970年1月1日到现在
在python中表示时间有三种方式:
- 时间戳(timetamp):从1970年1月1日 00:00:00到现在 ,是一个浮点数
- 格式化的时间字符串(format string)
2019-7-26 08:46:40
- 结构化的时间字符串(struct_time)----> 元组,9个元素,(年月日时分秒,一年的第几周,一年的第几天,夏令时)
python中时间日期格式化符号:
%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 当前时区的名称
%% %号本身
time模块常用方法
方法 | 描述 |
---|---|
time.localtime([sec]) | 将一个时间戳转化为一个当前时区的struct_time(若未提供参数,当前时间) |
timegmtime([sec]) | 和localtime()类似,不同的是,其是将一个时间戳转换为UTC时区(0时区)的struct_time |
time.time() | 返回当前时间戳 |
time.mktime(t) | 将time.struct_time转化时间戳 |
time.sleep(sec) | 线程推迟指定的时间运行,单位(s) |
time.asctime([t]) | 把表时间的元组或struct_time表示为:‘Sun July 26 09:06:35 2019’;如果未传参数,默认为time.localtime() |
time.ctime([t]) | 把一个时间戳转化为time.asctime()的形式。如果未传参数,默认time.time() |
time.strftime(format[, t]) | 把一个代表时间的元组或者/struct_time(localtime()和gmtime()转化为格式化的字符串,未传参数,默认为time.localtime()) |
time.strptime() | 将结构化字符串转化为struct_time形式 |
- 时间戳,计算机识别的
- 字符串时间,人类可以看的
- 结构化时间,对时间操作
时间戳和结构化
import time
now = time.time()
print(time.gmtime(now)) #UTC时间,0时区
#time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=20, tm_sec=28, tm_wday=4, tm_yday=207, tm_isdst=0)
print(time.localtime(now)) #当地时间,以北京所在地区为准
#time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=20, tm_sec=28, tm_wday=4, tm_yday=207, tm_isdst=0)
结构化时间和时间戳的转化
- time.mktime(结构化时间)
import time
tp_struct = time.localtime()
print(time.mktime(tp_struct))
#1564104165.0
结构化时间到字符串时间的转化
-
time.strftime(format[,t])
import time tp_struct = time.localtime() print(time.strftime('%Y-%m-%d %X',tp_struct)) #2019-07-26 09:26:37
字符串时间到结构化时间的转化
-
time.strptime(时间字符串,字符串对应格式)
import time print(time.strptime('2019-07-26','%Y-%m-%d')) #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)
结构化时间和字符串时间的转化(国际化时间字符串)
- time.asctime(结构化时间)
import time
tp_struct = time.localtime()
print(time.asctime(tp_struct))
#Fri Jul 26 09:48:59 2019
时间戳和字符串的转化(国际化)
import time
print(time.ctime(1500000000))
#Fri Jul 14 10:40:00 2017
datetime模块
相比time来说,datetime模块结构更直观,更容易调用
方法(类) | 描述 |
---|---|
datetime.date | 表示日期(类),常用属性year,month,day |
datetime.time | 表示时间(类),常用属性hour,minute,second,microsecond |
datetime.datetime | 表示日期 |
detetime.timedelta | 表示时间间隔 |
datetime.tzinfo | 与时区有关的信息 |
sys模块
sys模块与Python解释器交互的一个借口
处理命令行参数
在解释器启动后,argv列表包含了传递脚本的所有参数,列表的第一个元素是脚本自身的名称。
[外链图片转存失败(img-rPjQgiuZ-1564188651950)(C:\Users\10168\Desktop\DBOLXAT3(L@TC)]RC5HU%G.png)
import sys
print('Script name is ',sys.argv[0])
if len(sys.argv)>1:
print('there are', len(sys.argv) -1,'arguments:')
for i in sys.argv[1:]:
print(i)
else:
print('there are no arguments')
序列模块化
序列化
概念:将一个对象从内存中转化为课存储(字符串类型)或者可传输(bytes)类型的过程。
Python中叫pickling。
为什么要用序列化?
-
持久化数据类型
-
跨平台交互使用
-
使程序更易维护
json
json格式在各个语言中都可以通用序列化格式。在json中,所有的字符串必须为“”。
json类型 | Python类型 |
---|---|
{} | dict |
[] | dict |
“” | list |
“string” | str |
1234.56 | int/float |
true/false | True/False |
null | None |
json 优缺点
- 优点:所有的数据类型是各语言通用的。
- 缺点:
- json只支持比较少的数据类型
- 对数据类型的约束十分严格
- 字典中的key必须是字符串
- json只支持列表,字典,数值,字符串以及布尔值
四个功能
- dumps
- dump
- loads
- load
import json
dic1 = {"name":"City College","age":20,"type":"University",2:6}
sr_dic = json.dumps(dic1)
print(sr_dic)
#{"name": "City College", "age": 20, "type": "University", "2": 6}
print(dic1)
#{'name': 'City College', 'age': 20, 'type': 'University', 2: 6}
import json
dic1 = {"name":"City College","age":20,"type":"University"}
sr_dic = json.dumps(dic1)
dic_2 = json.loads(sr_dic)
print(type(dic_2))
print(dic_2)
#如果是元组,序列化时强转为列表;若元组作为字典的键,序列化时报错
如果把数据类型直接序列化写入文件中
import json
dic1 = {"name":"City College","age":20,"type":"University",2:6}
dic2 = {'city':'hangzhou','history':5000}
with open('dump_json','w') as f:
str_dict1 = json.dumps(dic1)
str_dict2 = json.dumps(dic2)
f.write(str_dict1 + '\n')
f.write(str_dict2 + '\n')
#dump方法接收一个文件句柄。直接将字典->字符串,写入文件中
with open('dump_json') as f1:
for i in f1:
ret = json.loads(i)
print(ret)
#{'name': 'City College', 'age': 20, 'type': 'University', '2': 6}
#{'city': 'hangzhou', 'history': 5000}
pickle
只用于Python
内存中结构化的数据 <----> 格式pickle <----> bytes类型 <----> 保存在文件或基于网络传输
pickle 优缺点:
-
优点
-
支持Python中几乎所有的类型
-
pickle会把数据类型序列化为bytes
-
-
缺点
- 只支持Python
模块提供四个功能
- 序列化
- dumps
- dump
- 反序列化
- loads()
- load()
import pickle
dic1 = {"name":"City College","age":20,"type":"University",2:6}
dic_b = pickle.dumps(dic1)
print(type(dic_b))
print(dic_b)
dic_d = pickle.loads(dic_b)
print(type(dic_d))
print(dic_d)
# <class 'bytes'>
# b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x0c\x00\x00\x00City Collegeq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x04\x00\x00\x00typeq\x04X\n\x00\x00\x00Universityq\x05K\x02K\x06u.'
# <class 'dict'>
# {'name': 'City College', 'age': 20, 'type': 'University', 2: 6}
dic_d))
print(dic_d)
# <class 'bytes'>
# b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x0c\x00\x00\x00City Collegeq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x04\x00\x00\x00typeq\x04X\n\x00\x00\x00Universityq\x05K\x02K\x06u.'
# <class 'dict'>
# {'name': 'City College', 'age': 20, 'type': 'University', 2: 6}