22 模块 时间 random os sys shutil

模块 时间 os sys random

1 时间模块

1.1 time模块

time模块主要包括一个类 struct_time。

1.1.1 时间格式分类
  1. 时间戳
    timestamp
    格林威治时间1970-01-01 00:00:00 到现在经历的总秒数。
    作用:主要用于时间间隔的计算。
now_timestamp = time.time()  # 返回值的类型是float
print(now_timestamp)
  1. 格式化时间
    按照某种格式显示的时间。
    作用:主要用于展示时间。
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)
  1. 结构化时间
    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 两个模块来进行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值