time模块
import time
time.sleep([n]) # 休眠N s
time.time() #获取当前的时间戳 1564101704.107082
在Python中,时间有3中表示方式:
- 时间戳(timetamp) :从1970.01.01 00:00:00 开始按秒计算的偏移量
- 格式化的时间字符串(format string)
- 结构化的时间(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 当前时区的名称
%% %号本身
import time
>>> time.time()
1564101692.7392354
>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
>>> [i for i in dir(time) if not i.startswith("_")]
['altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
time模块的常用方法
方法 | 描述 |
---|---|
time.localtime([sec]) | 将一个时间戳转换为当前时区的struct_time(若未提供参数,则显示当前时间) |
time.gmtime([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形式 |
- 时间戳,计算机事别
- 字符串时间,给人看的
- 结构化时间,对时间操作
时间戳和结构化时间的转化
- timegmtime(now)
- time.localtime(now)
>>> time.time()
1564103862.1325593
>>> now = time.time()
>>> time.gmtime(now) #UTC,0时区
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=17, tm_sec=51, tm_wday=4, tm_yday=207, tm_isdst=0)
>>> time.localtime(now)#北京 时间,东8区
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=17, tm_sec=51, tm_wday=4, tm_yday=207, tm_isdst=0)
结构化时间和时间戳的转化
- time.mktime(结构化时间)
>>> tp_truct = time.localtime()
>>> time.mktime(tp_truct)
1564104191.0
结构化时间到字符串时间的转化
- time.strftime(format[,t])
>>> tp_truct = time.localtime()
>>> time.strftime("%Y-%m-%d %X", tp_truct)
'2019-07-26 09:25:49'
字符串时间到结构化时间的转换
- time.strptime(时间字符串,字符串对应格式)
>>> 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(结构化时间)
>>> tp_truct = time.localtime()
>>> time.asctime(tp_truct)
'Fri Jul 26 09:48:51 2019'
>>>
>>> time.asctime()
'Fri Jul 26 09:49:58 2019'
>>>
时间戳和字符串时间的转换(国际化)
>>> time.ctime()
'Fri Jul 26 09:51:16 2019'
>>> time.ctime(time.time())
'Fri Jul 26 09:51:25 2019'
>>> time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
>>>
datetime模块
方法(类) | 描述 |
---|---|
datetime.date | 表示日期(类),常用属性year,month,day |
datetime.time | 表示时间(类),常用属性hour,minute,second,microsecond |
datetime.datetime | 表示日期 |
datetime.timedelta | 表示时间间隔 |
datetime.tzinfo | 与时区有关的信息 |
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 26, 10, 2, 25, 444424)
>>> print(datetime.datetime.now())
2019-07-26 10:02:49.956399
>>>
>>> print(datetime.datetime.now().date())
2019-07-26
>>> print(datetime.datetime.now().time())
10:05:24.965656
>>> print(datetime.datetime.now()+datetime.timedelta(-1))
2019-07-25 10:06:58.068425
>>> print(datetime.datetime.now()+datetime.timedelta(hours = 1))
2019-07-26 11:07:13.796489
>>>
sys模块
sys 模块是与Pathon解释器交互的一个接口
处理命令行参数
在解释器启动后,argv列表
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 ')
D:\NEWS Por>python day9_0726_time.py
Script name is day9_0726_time.py
There are no arguments
D:\NEWS Por>python day9_0726_time.py aa bb cc
Script name is day9_0726_time.py
There are 3 arguments
aa
bb
cc
序列化模块
序列化
概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程
Python中叫pickling
为什么要使用序列化?
- 持久化数据类型
- 跨平台交互使用
- 使程序更易维护
json
json格式在各个语言中都可以通用的序列化格式。在json中,所有字符串必须为""
json类型 | python类型 |
---|---|
{} | dict |
[] | list |
“string” | str |
123.45 | int/float |
true/false | True/False |
null | None |
json 优缺点
- 优点:所有数据类型是各语言通用的
- 缺点:
- 支持的数据类型少
- 对数据类型的约束十分严格
- 字典中的key必须是字符串
- json只支持列表,字典,数值
查看json的方法和属性
>>> dir(json)
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
>>>
四个功能
- dumps
- dump
- loads
- load
>>> dic = {"name":"Tom","age":18, 2:6}
>>> sr_dic = json.dumps(dic) #序列化将字典转换为字符串
>>> print(sr_dic)
{"name": "Tom", "age": 18, "2": 6}
>>> dic
{'name': 'Tom', 'age': 18, 2: 6}
>>> sr_dic #key被强转为字符串
'{"name": "Tom", "age": 18, "2": 6}'
#反序列化
>>> dic_2 = json.loads(sr_dic)
>>> type(dic_2)
<class 'dict'>
>>> dic_2
{'name': 'Tom', 'age': 18, '2': 6}
#如果是元组,序列化时强转为列表;若元组作为字典的键,序列化时报错
>>> tp = (1,2,3)
>>> tp1 = json.dumps(tp)
>>> print(tp1)
[1, 2, 3]
import json
dic = {"name":"Tom", "age":20}
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)))
import json
dic = {"name":"Tom", "age":20}
dic2 = {"name":"Jack", "age":18}
with open('dump_json', 'w') as f:
str_dic1 = json.dumps(dic) #序列化将字典->字符串,写入文件
str_dic2 = json.dumps(dic2)
f.write(str_dic1 + '\n')
f.write(str_dic2 + '\n')
with open('dump_json')as f:
for line in f: # 循环 反序列化读取
ret = json.loads(line)
print(ret)
>>> dic = {'城士':'杭州'}
>>> dic_sr = json.dumps(dic)
>>> dic_sr
'{"\\u57ce\\u58eb": "\\u676d\\u5dde"}' #中文的序列化
>>> dic_ = json.loads(dic_sr)
>>> dic_
{'城士': '杭州'}
>>>
pickle
只用于Python
内存中结构化的数据 <—>格式pickle<—>bytes类型<—>保存在文件或基于网络传输
-
优点
-
支持Python中的几乎所有类型
-
pickle会把数据类型序列化为bytes类型
-
缺点
- 只支持Python
模块提供四个功能
- 序列化
- dumps
- dump
- 反序列化
- loads()