Python time、sys模块

本文介绍了Python中的time模块,包括时间戳、结构化时间及字符串时间的相互转化,详细讲解了常用方法如mktime、strftime、strptime等。此外,还探讨了datetime模块的直观特性和sys模块在Python解释器交互中的作用。最后,提到了序列化技术,如json和pickle,以及它们在数据持久化和跨平台交互中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.56int/float
true/falseTrue/False
nullNone

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值