time模块
time模块一般用于不同时间格式的转换,在使用前用import time导入。在python中,通常有这几种方式来表示时间:
1.时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回浮点型
import time
timestamp = time.time()
print(timestamp,type(timestamp))
1560149134.940318 <class 'float'>
2.格式化时间:表示的是普通的字符串格式的时间。
format_time = time.strftime('%Y-%m-%d %X')
print(format_time,type(format_time))
2019-06-10 14:48:30 <class 'str'>
3.结构化时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
print(time.localtime()) # 本地时区的结构化时间,处于东八区,比格林尼治时间早8小时
print(time.gmtime()) # 格林尼治的结构化时间
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=10, tm_hour=14, tm_min=54, tm_sec=56, tm_wday=0, tm_yday=161, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=10, tm_hour=6, tm_min=54, tm_sec=56, tm_wday=0, tm_yday=161, tm_isdst=0)
4.不同格式时间的转换
# 结构化时间转换为格式化时间格式(strftime)
struct_time = time.localtime()
format_time = time.strftime("%Y-%m-%d %X", struct_time)
print(format_time)
2019-06-10 15:03:01
# 结构化时间转换为时间戳格式(mktime)
timestamp = time.mktime(struct_time)
print(timestamp)
1560150332.0
# 时间戳格式转换为结构化时间(localtime/gmtime)
timestamp = time.time()
struct_time = time.localtime(timestamp)
print(struct_time)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=10, tm_hour=15, tm_min=7, tm_sec=56, tm_wday=0, tm_yday=161, tm_isdst=0)
# 格式化时间转换为结构化时间(strptime)
struct_time = time.strptime('2019-6-10 15:00:00','%Y-%m-%d %X')
print(struct_time)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=10, tm_hour=15, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=161, tm_isdst=-1)
5.time.sleep(n):睡n秒,可用来暂停几秒
datetime模块
一般用于时间的加减
1.datetime.datetime.now()返回当前时间
import datetime
now_time = datetime.datetime.now()
print(now_time, type(now_time))
2019-06-10 15:27:15.639005 <class 'datetime.datetime'>
若要获取年月日,可以通过切分的方式获取,先要转换成字符串的格式。如获取2019-06-10
print(str(now_time).split()[0])
2019-06-10
2.时间的加减操作:不能指定月、年来加减
print(now_time + datetime.timedelta(3)) # 默认为天数,加三天
print(now_time + datetime.timedelta(-3)) # 减三天
print(now_time - datetime.timedelta(3)) # 减三天
print(now_time + datetime.timedelta(hours=1)) # 加1小时
print(now_time + datetime.timedelta(minutes=30)) # 加30分钟
print(now_time + datetime.timedelta(hours=5, minutes=21))
2019-06-13 15:16:18.804198
2019-06-07 15:16:18.804198
2019-06-07 15:16:18.804198
2019-06-10 16:16:18.804198
2019-06-10 15:46:18.804198
2019-06-10 20:37:18.804198
3.时间替换:相当于在当前时间基础上生成一个指定时间,不会改变原来的时间
now_time = datetime.datetime.now()
print(now_time.replace(year=2012, month=12, day=20))
print(now_time)
2012-12-20 15:26:34.608643
2019-06-10 15:26:34.608643
random模块
一般用来生成随机数
1.生成大于0小于1的小数
import random
print(random.random())
0.058421228800103364
2.生成大于等于m,小于等于n的整数(m<=n)
print(random.randint(1,3))
2
3.生成大于等于m,小于n的整数(m<n)
print(random.randrange(1,3))
1
4.生成大于m,小于n的小数(m<n)
print(random.uniform(1,3))
2.0484929224471413
5.获取列表中任意一个元素
lis = [1, 'a', [2,3,4],'bc']
print(random.choice(lis))
[2, 3, 4]
6.获取列表中n个元素组合(sample([list],n))
lis = [1, 'a', [2,3,4],'bc']
print(random.sample(lis,2))
[1, [2, 3, 4]]
7.将列表内的顺序打乱
lis = [1, 'a', [2,3,4],'bc']
random.shuffle(lis)
print(lis)
[[2, 3, 4], 'bc', 1, 'a']
os模块
负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理
方法 | 详解 |
---|---|
os.mkdir(dirname) | 新建文件夹 |
os.rmdir(dirname) | 删除空文件夹 |
os.listdir(dirname) | 列出目录下所有的文件名 |
os.remove(file) | 删除文件 |
os.rename(oldname,newname) | 文件重命名 |
os.environ | 获取系统环境变量 |
os.path.dirname(path) | 返回path的目录,用在执行文件添加环境变量 |
os.path.exists(path) | 判断文件是否存在 |
os.path.isfile(path) | 判断是否是一个文件 |
os.path.isdir(path) | 判断是否为文件夹 |
os.path.join(path1[,path2[,...]]) | 按照不同的操作系统拼接出不同的路径 |
os.path.getsize(path) | 计算文件大小 |
os.walk(path) | 返回当前路径下所有文件夹和文件 |
sys模块
用于与python交互
方法 | 详解 |
---|---|
sys.argv | 命令行参数List,第一个元素是程序本身路径,当使用Python file.py 参数 ,接收参数 |
sys.hexversion | 获取解释器的版本 |
sys.path | 获取当前文件导入模块的路径 |
sys.stdout.write("ab") | 打印相当于print,用c写的 |
sys.stdin.read(n) | 写入n个字符,相当于input,用c写的 |
json模块与pickle模块
用来传输数据
序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,这个序列化必须得规定格式,我们保存的格式为json文件
反序列化:把json文件从硬盘中读取出来
json文件并不是Python独有的,所有的语言都有json,所有json可以跨平台/语言进行传输数据。在python中只能写入的dict/list/str/int/float/bool/None类型
pickle支持python中任意数据类型,所以不能跨平台使用(因为不同平台的函数不同),并且pickle序列化的过程中是以二进制的形式转化
json
import json
dict = {'name':'nick'}
res = json.dumps(dict) # 在内存中写数据
print(res,type(res))
{"name": "nick"} <class 'str'>
res2 = json.loads(res) # 在内存中读数据
print(res2,type(res2))
{'name': 'nick'} <class 'dict'>
dict = {'name':'nick'}
# 在文件中写数据,生成test.json文件
with open('test.json', 'w', encoding='utf8') as fw:
json.dump(dict, fw)
# 在文件中读数据
with open('test.json', 'r',encoding='utf8') as fr:
data = json.load(fr)
print(data)
{'name': 'nick'}
pickle
import pickle
dict = {'name':'nick'}
res = pickle.dumps(dict) # 在内存中以二进制的形式写数据
print(res)
b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00nickq\x02s.'
res2 = pickle.loads(res) # 在内存中读数据
print(res2)
{'name': 'nick'}
dict = {'name':'nick'}
# 因为是以二进制的形式,所以要用wb模式写入test.pkl中,不用指定字符编码
with open('test.pkl', 'wb') as fw:
pickle.dump(dict, fw)
# 用rb模式读取test.pkl中数据,不用指定字符编码
with open('test.pkl', 'rb') as fr:
data = pickle.load(fr)
print(data)
{'name': 'nick'}