模块 时间 os sys random
1 时间模块
1.1 time模块
time模块主要包括一个类 struct_time。
1.1.1 时间格式分类
- 时间戳
timestamp
格林威治时间1970-01-01 00:00:00 到现在经历的总秒数。
作用:主要用于时间间隔的计算。
now_timestamp = time.time() # 返回值的类型是float
print(now_timestamp)
- 格式化时间
按照某种格式显示的时间。
作用:主要用于展示时间。
now_format_time1 = time.strftime('%Y-%m-%d %H:%M:%S %p') # 返回值的类型是str
now_format_time2 = time.strftime('%Y-%m-%d %X')
print(now_format_time1)
print(now_format_time2)
- 结构化时间
struct_time元组中包括9个元素:
年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时
作用:主要用于获取时间的某一部分。
now_struct_time = time.localtime() # 返回值的类型是time.struct_time
print(now_struct_time)
1.2 三种时间格式转换
import time
struct_time1 = time.localtime()
stamp_time = time.mktime(struct_time1)
struct_time2 = time.localtime(stamp_time) # 东八区时间(GMT+08:00)
struct_time3 = time.gmtime(stamp_time) # 格林威治时间(GMT)
format_time = time.strftime('%Y-%m-%d %H:%M:%S', struct_time1)
struct_time4 = time.strptime(format_time, '%Y-%m-%d %H:%M:%S')
1.3 datetime模块
datatime模块重新封装了time模块,主要包含的类包括:
timedelta 主要用于计算时间跨度
tzinfo 与时区相关
time 只关注时间
date 只关注日期
datetime 关注时间和日期
import datetime
now_datetime = datetime.datetime.now()
print(now_datetime)
可以直接进行时间运算。
import datetime
now_datetime = datetime.datetime.now()
target_datetime = datetime.timedelta(days=3)
print(now_datetime + target_datetime)
1.4 其它
time.sleep(sec)
用于推迟调用线程的运行
sec – 推迟执行的秒数
time.asctime([t])
返回一个字符串,时间格式在Linux系统中常用。
t – 9个元素的元组或者通过函数 gmtime() 或 localtime() 返回的时间值
datetime.datetime.now()
datetime.datetime.utcnow()
datetime.datetime.fromtimestamp(int) 时间戳转换成格式化时间字符串,不能指定格式。
应用,打印进度条
import time
def progress_bar(recv_pct):
cnt = int(50 * recv_pct)
print('\r[%-50s] %d%%' % (('#'*cnt), recv_pct*100), end='')
recv_size = 0
total_size = 20049
proc_size = 1024
while recv_size < total_size:
if (total_size - recv_size) // proc_size != 0:
time.sleep(0.5)
recv_size += proc_size
else:
time.sleep(0.3)
recv_size = total_size
recv_pct = recv_size / total_size
progress_bar(recv_pct)
2 random模块
用于产生随机值
random.random() 用于生成一个从0到1的随机浮点数。[0, 1]
random.uniform(x, y) 用于生成一个指定范围[x, y]/[y, x]内的随机符点数。
random.randint(x, y) 用于生成一个从x到y的随机整数。[x, y]
random.randrange(x, y) 用于生成一个从x到y(不包括y)的随机整数。[x, y)
random.choice(seq) 从序列seq(list, tuple, 字符串等)中获取一个随机元素。
random.sample(seq, k) 从序列seq中随机获取指定长度k的片断并随机排列。
random.shuffle(lst) 将列表lst的元素随机排序。
应用,验证码生成器
import random
def get_verf_code(code_len=4):
verf_code = ''
for __ in range(code_len):
cap_char = chr(random.randint(65, 90))
low_char = chr(random.randint(97, 122))
int_char = str(random.randint(0, 9))
radm_char = random.choice([cap_char, low_char, int_char])
verf_code += radm_char
return verf_code
print(get_verf_code(15))
3 os模块
用于控制操作系统的模块。
os.getcwd() 获取当前工作目录(Current Working Directory)
os.chdir(“dirname”) 改变当前脚本工作目录
os.curdir 返回当前目录: (’.’)
os.pardir 获取当前目录的父目录字符串名:(’…’)
os.makedirs(‘dirname1/dirname2’, mode=0o777) 用于递归创建目录
os.removedirs(‘path’) 用于递归删除空文件夹。如果父文件夹中的所有的子文件夹为空,成功删除后没有子文件夹,才尝试删除父文件夹
os.mkdir(‘dirname’) 生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname’) 删除单级空目录,若目录不为空则无法删除,报错
os.listdir(‘dirname’) 列出指定目录下的所有子文件和子文件夹,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename(“oldname”,“newname”) 重命名文件/目录
os.stat(‘path/filename’) 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->‘nt’; Linux->‘posix’
os.system(“bash command”) 运行shell命令,直接显示
os.environ 获取系统环境变量,返回字典类型,键值均为字符串
os.path.abspath(path) 根据平台返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名,返回元组
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True,否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True, 否则返回False
os.path.join(path1[, path2[, …]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
应用,获取当前位置的上一级的上一级目录
import os
import sys
BASE_DIR1 = os.path.dirname(os.path.dirname(__file__))
BASE_DIR2 = os.path.normpath(os.path.join(
__file__, # os.path.abspath(__file__),
os.pardir,
os.pardir
))
# Python 3.5之后
from pathlib import Path
root = Path(__file__)
BASE_DIR3 = root.parent.parent
4 sys模块
sys.argv 接收命令行参数列表,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
应用,文件拷贝
import sys
import os
if len(sys.argv) != 3:
print('传入参数数量错误。')
exit()
src_path = sys.argv[1]
dst_path = sys.argv[2]
if not os.path.isfile(src_path):
print('待拷贝文件不存在。')
exit()
with open(r'%s' % src_path, mode='rb') as src_file, \
open(r'%s' % dst_path, mode='wb') as dst_file:
for each_line in src_file:
dst_file.write(each_line)
总结:os模块sys模块的区别
os模块主要提供与操作系统相关的功能;
sys模块主要提供与python解释器相关的功能。
5 shutil模块
对文件,文件夹提供了许多高级操作,包括压缩包等,特别是提供了支持文件复制和删除的函数。
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
shutil.copyfile(src, dst)
拷贝文件
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst)
拷贝文件和权限
shutil.copy2(src, dst)
拷贝文件和状态信息
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归地去拷贝文件夹
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
shutil.make_archive(base_name, format,…)
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。