Python基础之内置模块

时间:2022-02-17 22:16:59

一、序列化模块

将原本的字典、列表等内容转换成一个字符串等过程叫做序列化

import json
#  json模块提供了四个功能:dumps、dump、loads、load
dic={"k1":"v1","k2":"v2","k3":"v3"}
x = json.dumps(dic) # 序列化:将一个字典换成一个字符串
# 转换等字符串的字典类中的字符串由""表示
print(type(x),x)

# 反序列化
y = json.loads(x) # 反序列化:将一个字符串格式的字典转换成字典
# 要用json.loads功能处理自处字符串类型的字典中必须是由""表示
print(type(y),y)

# 处理嵌套的数据类型
ls = [1,2,(1,2,4,5,6),5,7,{"k1":"v1","k2":"v2","k3":"v3"}]
x = json.dumps(ls)
print(type(x),x)

y = json.loads(x)
print(type(y),y)
import json

f = open("123", mode="w")
dic = {"k1": "v2", "k2": "v2", "k3": "v3"}
# dump方法是接收一个文件句柄,直接将字典转换成json字符串写入文件
json.dump(dic, f)
f.close()

f = open("123")
# load是接收一个文件句柄,直接将文件中的json字符串转换成数据返回
dicc = json.load(f)
f.close()
print(type(dicc), dicc)
import json

# json格式化输出
x = {"user": ["matt", "heking"], "age": 11, "sex": "man"}
y = json.dumps(x, sort_keys=True, indent=2, separators=(",", ":"), ensure_ascii=False)
print(y)

pickle:用于python特有的类型 和 python的数据类型间进行转换

pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load(不仅可以序列化字典、列表 还可以python中任意的数据类型序列化)

import pickle

dic = {"k1":"v1","k2":"v2","k3":"v3"}
x = pickle.dumps(dic)
print(x)    #返回一个二进制内容

y = pickle.loads(x)
print(y)    #返回一个字典

json是一种所有语言都可以使用都数据结构,如果将一个字典或者序列化成一个json文件,Java代码或js代码也可以拿来使用。如果使用pickle进行序列化,其他语言就不能使用。

如果序列化的内容是列表或者字典,可以使用json模块,

二、random模块

import random

#   随机小数
x = random.random()  # 生成随机小数,大于0小于1
print(x)
y = random.uniform(1, 3)  # 大于1小于3的小数
print(y)

#   随机整数
x = random.randint(1, 5)  # 大于1小于5的整数
print(x)
y = random.randrange(1, 10, 2)  #大于1小于10之间的奇数
print(y)
import random

x = random.choice([1, "23", [4, 5]])  # 随机选择一个返回
print(x)
y = random.sample([1, "23", [4, 5]], 2) #列表元素任意2组合
print(y)
import random

#   大款列表顺序
x = [1,2,3,4,5]
random.shuffle(x)   #随机打乱次序
print(x)

 

import random

#   随机生成验证码
def num():
    code = ""
    for i in range(4):
        number = random.randint(0, 9)
        asc = chr(random.randint(65, 90))  # 随机在ascii码选择一个大写字母
        asc2 = chr(random.randint(97,122))  # 随机在ascii码选择一个小写字母
        add = random.choice([number, asc,asc2])
        # join列表必须都是字符串
        code = "".join([code, str(add)])    #将join后变拼接到code里
    return code
print(num())

三、OS模块

OS模块是与操作系统交互的一个接口

import os

# os.makedirs("11/22")    # 创建多层递归目录
# os.removedirs("11/22")
# os.mkdir("11")  # 创建一个单级目录
# os.rmdir("11")  # 删除一个单级目录
# os.listdir("11")    # 列车指定目录下所有文件子目录隐藏文件等,以列表方式显示
# os.remove("11") # 删除一个文件
# os.rename("x","y")  # 重命名一个文件或目录
# os.stat("11")   # 获取文件或目录信息
import os

os.system("bash command")   # 运行shell命令  直接显示
os.popen("bash command").read() # 运行shell命令 获取执行结果
x = os.getcwd() # 获取当前工作目录
print(x)
os.chdir("111") # 改变当前脚本工作目录  linux下 cd命令
import os

os.path.abspath(path=)   # 返回path规范化绝对路径
os.path.split(path=) # 将path分割成目录文件名 按元组返回
os.path.dirname(path=)   # 返回path目录
os.path.basename(path=)  # 返回psth最后文件名
os.path.exists(path=)    # 如果path存在,则返回True 否则False
os.path.isabs(path=)    # 如果path是绝对路径 返回True
os.path.isfile(path=)   # 如果path是一个存在文件 返回True
os.path.isdir(path) # 如果path是一个存在等目录 返回True
os.path.join(path=,path=)   # 将多个路径组合返回
os.path.getatime(path)  # 返回所指向的文件或者目录最后访问时间
os.path.getmtime(path)  # 返回所指向的文件或目录最后修改时间
os.path.getsize(path)   # 返回path的大小

 OS模块运维所需

# os.stat 获取文件/目录信息的结构说明

import os

y = os.stat(os.path.dirname(os.path.dirname(__file__)))
print(y)

os.stat_result(st_mode=16877, st_ino=6398488, st_dev=16777220,
               st_nlink=23, st_uid=501, st_gid=20, st_size=736,
               st_atime=1554103277, st_mtime=1554088340, st_ctime=1554088340)

stat结构:
st_mode:inode保护模式
st_ino:inode节点号
st_dev:驻留设备号
st_nlink:inode链接数
st_uid:所有者的用户ID
st_gid:所有者的组ID
st_size:普通文件以字节为单位的大小,包含等待某些特殊文件的数据
st_atime:上次访问的时间
st_mtime:最后一次修改时间
st_ctime:由操作系统报告的"ctime",在类Linux系统是最新的元数
据更改时间,在其他Windows是创建时间


os.sep  # 输出操作系统特定的路径分隔符:windows为"\\",Linux为"/"
os.name # 输出字符串指示当前使用平台:Windows-->"nt",Linux-->"posix"
os.linesep  # 输出当前平台使用的行终止符:Windows为"\r\n",linux为"\n"
os.pathsep  # 输出用于分割文件路径的字符串:Windows为";",Linux为":"
# sys是与python解释器交互的一个接口

import sys

sys.argv    # 命令行参数list,第一个元素是程序本身路径
sys.exit(n) # 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version # 获取python解释器程序的版本信息
sys.path    # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform    # 返回操作系统平台名称

import sys
try:
    sys.exit(1)
except SystemExit as e:
    print(e)

  

四、time时间模块

# time时间模块
import time

time.sleep(1)   # 推迟指定的时间运行,单位为秒
print(time.time)    # 获取当前时间戳

# 表示时间的的三种方式
# 在python中通常有三种方式来表示时间:时间戳、元组、格式化时间字符串。
# 1、时间戳:通常来说,时间戳表示从1970年1月1日0:0:0开始计算的偏移量 运行type(time.time()),返回float类型
# 2、格式化时间字符串:1999-12-01
%y  # 两位数的年份表示(00-99)
%Y  # 四位数的年份表死(000-9999)
%m  # 月份(01-12)
%d  # 某一天(1-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  # 当前时区的名称
%%  # 转译%本身
# 3、元组:元组*有9个元素 年、月、日、时、分、秒、一年内第几周、一年内第几天
import time

print(time.time())  # 时间戳
print(time.strftime("%Y-%m-%d %X")) # 时间字符串
print(time.strftime("%Y-%m-%d %H:%M:%S"))
print(time.localtime()) # 时间元组: localtime将一个时间戳转换为当前时区的struct_time

# 时间戳是计算机能够识别的时间,时间字符串是人能够看懂的时间,时间元组则是用来操作时间的

 

# 时间戳-->结构化时间
# time.gmtime(时间戳)    # UTC时间,与英国伦敦当地时间一致
# time.localtime(时间戳) # 当地时间

print(time.gmtime(120000000))   # 伦敦时间
time.struct_time(tm_year=1973, tm_mon=10, tm_mday=20, tm_hour=21,
                 tm_min=20, tm_sec=0, tm_wday=5, tm_yday=293,
                 tm_isdst=0)
print(time.localtime(120000000))
time.struct_time(tm_year=1973, tm_mon=10, tm_mday=21, tm_hour=5,
                 tm_min=20, tm_sec=0, tm_wday=6, tm_yday=294, tm_isdst=0)

# 结构化时间--->时间戳
# time.mktime(结构化时间)
x = time.localtime(1200000)
print(time.mktime(x))
# 结构化时间--->字符串时间
# time.strftime("格式定义","结构化时间")   # 结构化时间参数不传则显示当前时间
print(time.strftime("%Y-%m-%d %X"))
print(time.strftime("%Y-%m-%d",time.localtime(130000000)))


# 字符串时间--->结构化时间
# time.strptime(时间字符串,字符串对应格式)
print(time.strptime("2000-2-23","%Y-%m-%d"))
time.struct_time(tm_year=2000, tm_mon=2, tm_mday=23, tm_hour=0,
                 tm_min=0, tm_sec=0, tm_wday=2, tm_yday=54, tm_isdst=-1)
print(time.strptime("5/13/2000","%m/%d/%Y"))
time.struct_time(tm_year=2000, tm_mon=5, tm_mday=13, tm_hour=0, 
                 tm_min=0, tm_sec=0, tm_wday=5, tm_yday=134, tm_isdst=-1)
# 结构化时间--> %a %b %d %H:%M:%S %Y
# time.asctime(结构化时间) 如不传参数,直接返回当前时间格式化串
print(time.asctime(time.localtime(110000000)))
# Wed Jun 27 11:33:20 1973
print(time.asctime())
# Tue Apr  2 16:37:34 2019


# 时间戳---> %a %b %d %H:%M:%S %Y
# time.ctime(时间戳) # 如不串参数,直接返回当前时间的格式化串
print(time.ctime())
Tue Apr  2 16:42:13 2019
print(time.ctime(155500000))
Fri Dec  6 02:26:40 1974

 

# 计算时间差
import time

# 将字符串-->格式化时间--> 时间戳
x = time.mktime(time.strptime("2010-12-23 12:42:23", "%Y-%m-%d %H:%M:%S"))
y = time.mktime(time.strptime("2011-12-30 12:33:32", "%Y-%m-%d %H:%M:%S"))
z = y - x  # 现在时间减去过去时间差
a = time.gmtime(z)
print("过去了%d年%d月%d天%d时%d分%d秒" % (a.tm_yday - 1970, a.tm_mon - 1, a.tm_mday - 1, a.tm_hour, a.tm_min, a.tm_sec))