Pyhton中的内置模块

系统内置模块

系统内置模块就是安装python解释器后,系统给提供的模块

在需要时可以导入后使用,例如:json,re,os等等

1.序列化模块:方便数据存储和传输

序列化是指可以把python中的数据,以文本或二进制的方式进行转换,并且还能反序列化为原来的数据;

数据在程序与网络中进行传输和存储时,需要以更加方便的形式进行操作,因此需要对数据进行序列化

对数据进行序列化的主要方法有以下两种

  • 二进制序列化模块 pickle (python专用)
  • 文本序列化模块 json (通用)

1.1 pickle 序列化 :import pickle

使用时注意先导入模块 import pickle

  • dumps() 序列化,可以把一个python的任意对象序列化成为一个二进制
    • 返回一个序列化后的二进制数据
    • pickle.dumps(var)
  • loads() 反序列化,可以把一个序列化后的二进制数据反序列化为python的对象
    • 返回一个反序列化后的python对象
    • pickle.loads(var)
import  pickle
a = 'cxy ha!'
b = pickle.dumps(a)
c = pickle.loads(b)
print(b)
print(c)
>>> b'\x80\x03X\x07\x00\x00\x00cxy ha!q\x00.'
    cxy ha!
  • dump(参数1,参数2) 序列化,把一个数据对象进行序列化并写入到已经打开的文件中

    • 参数1,需要序列化的数据对象
    • 参数2,写入的文件对象
    • pickle.dump(var,fp)
    #设定数据var
    #打开文件进行写入
    import  pickle
    a = 'qwq'
    with open('test.txt','wb') as fp:
        pickle.dump(a,fp)
    
  • load(参数1) 反序列化,在一个已经打开的文件中读取序列化的数据,并且完成一个反序列化

    • 参数1,读取的文件对象
    • pickle.load(fp)
    import  pickle
    with open('test.txt','rb') as fp:
        a = pickle.load(fp)
        print(a)
    

###1.2 json序列化:import json

JSON:JavaScript Object Notation
JSON 是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式

JSON 在js语言中是一个对象的表示方法,和Python中的字典的定义规则和语法都很像

JSON 在互联网中又是一种通用的数据交换,数据传输,数据定义的一种数据格式

  • json.dumps() 完成json格式数据的序列化
  • json.loads() 完成json格式数据的反序列化
import  json
a = ['你好哇!']
b = json.dumps(a)
c = json.loads(b)
print(b,type(b))
print(c,type(c))
>>>["\u4f60\u597d\u54c7!"]<class 'str'>
   ['你好哇!']<class 'list'>
  • json.dump() 和pickle模块的dump方法一样
  • json.load() 和pickle模块的load方法一样
import  json
a = {1:'a',2:'b'}
with open('test.txt','w+',encoding='utf-8') as fp:
    json.dump(a,fp)
    print(type(a))
    fp.seek(0)
    b = json.load(fp)
    print(b,type(b))
>>><class 'dict'>
   {'1': 'a', '2': 'b'}<class 'dict'>
#注意!此时文件里的内容为:
{"1": "a", "2": "b"}
#json的是双引号
#如果a是元组,会被转为列表
#如果a是列表、字典、整型、字符串等类型,通过dump()和load()后还是原来的类型

#但是只有列表和字典转化的是json格式数据
{'name':'admin','age':20,'sex':'男'}  
[1,2,3]                               
[
  {'name':'admin','age':20,'sex':'男'},
  {'name':'aa','age':21,'sex':'m'}
]
#其他的都只是转为字符串了而已
#js对象定义:
// demo.js
// javascript 中的对象定义方法
var obj = {'name':'admin','age':20,'sex':'男'}
// javascript 中的数组定义方法
var arr = [1,2,3]

2.数学与数值相关模块:math,random

###2.1 math:import math

python中的内置数学模块Math,提供了很多的数学相关运算

文档地址: https://docs.python.org/zh-cn/3.7/library/math.html#module-math

数论与表示函数
幂函数与对数函数
三角函数
角度转换
双曲函数
特殊函数
常量
import math
  • math.ceil() 向上取整

  • math.floor() 向下取整

    #注意和内置函数round()的区别
    import  math
    a = round(2.5)
    b = round(3.5)
    c = math.ceil(2.5)
    d = math.floor(3.5)
    print(a,b,c,d)
    >>>2 4 3 3
    
  • math.pow() 计算数值的n次方,结果是浮点

    #注意和内置函数pow()的区别
    import  math
    a = pow(2,5)
    b = math.pow(2,5)
    print(a,b)
    >>>32 32.0
    
  • math.sqrt() 开平方运算,结果是浮点

    import  math
    a = math.sqrt(3.1)
    b = math.modf(-3.1)
    print(a)
    >>>1.760681686165901
    
  • math.fabs() 计算绝对值,结果是浮点

    import  math
    a = abs(-3)
    b = math.fabs(-3)
    print(a,b)
    >>>3 3.0
    
  • math.modf() 把一个数值拆分成小数和整数组成的元组

    import  math
    a = math.modf(3)
    b = math.modf(-3.1)
    print(a,b)
    >>>(0.0, 3.0) (-0.10000000000000009, -3.0)
    
  • math.copysign(x,y) 把第二个参数的正负符合拷贝给第一个参数,结果为浮点数

    import  math
    a = math.copysign(3.1,-20)
    print(a)
    >>>-3.1
    
  • math.fsum() 将一个容器类型数据中的元素进行一个求和运算,结果为浮点数

    import  math
    #a = math.fsum('123')  #注意这里会报错!容器中的元素必须是可以运算的number类型
    b = math.fsum([1,2,3])  #列表可
    c = math.fsum({1,2,3})  #集合可
    d = math.fsum({1:'a',2:'b',3:'c'})  #字典可
    e = math.fsum((1,2,3))  #元组也可
    print(b,c,d,e)
    >>> 6.0 6.0 6.0 6.0
    #就字符串不可
    
  • math.factorial(x) 以一个整数返回 x 的阶乘,x必须为整数

    import  math
    b = math.factorial(0)
    c = math.factorial(3)
    print(b,c)
    >>>1 6
    
  • math.pi 数学常数π = 3.141592…,精确到可用精度

    math.e 数学常数e = 2.718281…,精确到可用精度

    a = math.pi
    b = math.e
    print(a,b)
    >>>3.141592653589793 2.718281828459045
    

###2.2 random:import random

该模块实现了各种分布的伪随机数生成器

import random
  • random.random() 返回 0 - 1 之间的随机小数 (左闭右开)

    import  random
    a = random.random()
    print(a)
    >>>0.8966501036074478
    print(a)
    >>>0.7141464273728062
    
  • random.randrange([开始值],结束值,[步进值]) 随机获取指定范围内的整数。【注意是左闭右开】

    【验证码就是通过random.randrange()产生的,还有高并发下的订单号】

    import  random
    a = random.randrange(4)
    b = random.randrange(4,10)
    c = random.randrange(4,10,5)  #步进值为5,所以只能从4和9中随机选一个
    print(a,b,c)
    >>>1 8 4
    print(a,b,c)
    >>>0 6 9
    
  • random.randint() 随机产生指定范围内的随机整数,

    【注意和random.randrange()的区别!random.randint(),没有步进值,且范围是左闭右闭】

    import  random
    b = random.randint(9,10)
    print(b)
    >>>10
    
  • random.uniform() 获取指定范围内的随机小数

    【和random.random()相比,它可以指定范围,而random.random() 只能产生0到1之间的随机小数 】

    import  random
    b = random.uniform(8,10)
    print(b)
    >>>9.08455783944536
    
  • random.choice() 随机获取容器类型中的值

    【这里的容器类型不包括集合】

    #random.choice(容器) 随机获取容器里的值,返回值的类型与容器类型无关,只与值的类型有关
    import  random
    b = random.choice([1,'c'])
    print(b,type(b))
    >>>c <class 'str'>
    
    b = random.choice([{1:'c'},{2,3}])
    print(b,type(b))
    >>>{1: 'c'} <class 'dict'>
    print(b,type(b))
    >>>{1: 'c'} <class 'dict'>
       {2, 3} <class 'set'>
    
    #如果容器类型是字典,返回的值是字典里的value,不是key    
    import  random
    a = {1:'b',2:'a','c':2}
    b = random.choice(a)
    print(b,type(b))
    >>>a <class 'str'>
    #注意!容器类型不能是set,会报错说set对象不是可下标的
    #所以random.choice()是通过随机下标来获取随机值
    
  • random.shuffle() 随机打乱当前列表中的值,返回值为None,直接打乱原数据。

    【注意只能打乱列表!】

    import  random
    a = [1,2,3]
    random.shuffle(a)
    print(a,type(a))
    >>>[3, 2, 1] <class 'list'>
    

3.os模块:系统操作相关模块

对接当前所使用的系统

【在python里使用os函数 == 直接在cmd输入命令】

【就跟用linux指令使用linux系统一样,也可以用os模块里的函数使用windows系统】

import os

3.1 os操作系统接口模块:提供一些方便使用操作系统相关功能的函数

  • os.getcwd() 获取当前的**工作目录,**注意获取的不是当前脚本的目录

    【工作目录就是运行python编译器的目录】

    【这个主要是用于cmd之类的命令行终端,输入python3 1.py 和输入python3 ./(上级目录)/ .py,它们的工作目录就会不一样】

    import  os
    b = os.getcwd()
    print(b)
    >>>D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业
    ## 如果在当前目录执行这个脚本文件,那么getcwd获取的就是当前的文件目录
    # 如果把执行的目录切换到其它位置,在执行当前脚本,那么获取的就是你执行这个脚本时的目录
    
  • os.chdir() 修改当前的工作目录

    【和用cd修改目录是一样的】

    import  os
    print(os.getcwd())
    os.chdir('D:\学习笔记\新职课\第五章-模块,包与库训练\第二节')
    print(os.getcwd())
    >>>D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业
       D:\学习笔记\新职课\第五章-模块,包与库训练\第二节  
    
  • os.listdir() 获取当前或指定目录中的所有项(文件,文件夹,隐藏文件),返回列表

    【不指定目录时,默认为当前的工作目录

    == linux 中的 ls -a

    == windows dir】

    import  os
    print(os.listdir()) #不指定目录时,默认为当前的工作目录
    #print(os.listdir('./')) 也是指当前目录
    os.chdir('D:\学习笔记\新职课\第五章-模块,包与库训练\第二节')
    print(os.listdir())
    print(os.listdir('D:\学习笔记\新职课\第五章-模块,包与库训练'))
    >>>['data.txt', 'test.py', 'test.txt']
       ['作业', '文档', '素材'] 
       ['.idea', '第一节', '第一节笔记-File操作.md', '第二节', '第二节笔记-内置模块.md']
    
  • os.mkdir(文件夹路径,权限) 在文件夹路径中创建文件夹,默认为当前工作目录,当文件夹已经存在时无法创建

    【对windows来说,这个“权限”是没任何作用的】

    【无法递归创建,如果前面的文件夹不存在则创建失败】

    【递归创建需要用os.makedirs()】

    import  os
    print(os.getcwd())
    os.mkdir('aa')
    >>>D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业
    #此时就在这个目录下创建了文件夹aa
    
    os.chdir('D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业\\aa')
    os.mkdir('ab',0o777)
    #此时就在aa的目录下创建了文件夹ab
    #注意这里的路径!作业后面要跟\\aa,需要用到反转义字符,输出\,取消\的转义效果
    
    '''
        关于系统中的文件权限,仅限linux系统
        drwxr-xr-x   4 yc  staff   128 11 27 11:40 aa
        dr----x--x   2 yc  staff    64 11 27 11:42 abc
        第一位 d代表是一个目录,如果是-则表示为一个文件
        前三位的rwx 代表文件拥有人( user )的权限
        中间三位的 r-x 代表文件所属组( group )的权限
        最后三位的 r-x 代表其他人( other )的权限
        
        其中 r w x 代表不同的操作权限,最高为7,777 分别代表 所有人,所属组,和其它
        r 表示是否可读,   4
        w 表示是否可写     2
        x 表示是否可执行   1
        
        注意:无法使用python去创建一个比自己这个进程权限还高的文件
    '''
    
  • os.makedirs() 可以递归创建文件夹

    import  os
    os.makedirs('123\\455\\678')
    #此时就创建了123文件夹,里面有455文件夹,455文件夹里面有678文件夹
    
  • os.rmdir() 删除空文件夹:文件夹要为空

    import  os
    os.rmdir('ab')
    os.rmdir('123/455/678')
    #此时就删掉了之前建的为空的文件夹ab和123里的455里的678
    #如果想删aa,会报错,因为aa里有空文件夹ab
    #只会删除目录里的最后一个空文件夹
    
  • os.removedirs() 递归删除空文件夹

    【注意!如果只有最后一个文件夹为空,那么只会删除掉最后一个文件夹

    因为删掉最后一个文件夹后,倒数第二个文件夹成为最后一个,而它不为空,则不会执行删除;

    如果后一个空文件夹删除之后前一个为空,则可以一直删除】

    import  os
    os.removedirs('aa/ab')  #文件夹可以用\,也可以用/
    #此时把aa和ab一起删掉了
    
    #注意在mac系统中:
    '''
    连续创建几个空文件
    abc/
        def/
            aaa/
    ./abc/def/aaa/
    
    在mac系统中连续创建了abc目录后又在里面创建def,又在def里面创建aaa
    此时。使用os.removedirs('./abc/def/aaa/') 删除时,只删除了aaa。
    为什么?
    因为mac系统中的文件夹只要被使用过,都会默认创建一个隐藏文件 .DS_Store,因此这个文件夹不在是空文件夹了
    '''
    
  • os.remove() 删除文件

    import  os
    os.remove('123/455/123.py')
    #此时就成功删除了123.py
    
  • os.rename() 修改文件或文件夹的名字

    import  os
    os.rename('123/455','456')
    #此时把123下的455修改成了和123同目录的456
    
    #再重新建一个123/455
    import  os
    os.mkdir('123/455')
    os.rename('123/455','123/456')
    #此时就把123下的455改成了123下的456
    
  • os.system() 执行操作系统中的命令

    import  os
    os.system('dir')
    #就跟在linux系统中输入ls 或ls -a一样,返回当前工作目录中的所有文件和文件夹
    
    import  os
    os.system('python 1.py')
    #此时就能运行在当前工作目录下的1.py文件
    

3.2 os.path 系统模块中的路径模块

  • os.path.abspath(’./’) 将相对路径转化为绝对路径

    import  os
    a = os.path.abspath('./')
    print(a)
    >>>D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业
    
  • os.path.basename() 获取路径中的主体部分 就是返回路径中的最后一部分

    import  os
    a = os.path.basename('D:\学习笔记\新职课\第五章-模块,包与库训练\第二节')
    print(a)
    >>>第二节
    
  • os.path.dirname() 获取路径中的路径部分,返回路径中最后一部分之前的内容。

    【也就是主体所在的文件夹的路径】

    import  os
    a = os.path.dirname('D:\学习笔记\新职课\第五章-模块,包与库训练\第二节')
    print(a)
    >>>D:\学习笔记\新职课\第五章-模块,包与库训练
    
  • os.path.join() 链接多个路径,组成一个新的路径

    import  os
    a = os.path.join('./123/456/','1.py')
    print(a)
    >>>./123/456/1.py
    #显示的路径是拼接起来了,但是文件并没有被移进去
    
  • os.path.split() 拆分路径,把路径拆分为路径和主体部分

    import  os
    b = os.path.split('123/456')
    print(b)
    >>>('123', '456')
    
  • os.path.splitext() 拆分路径,可以拆分文件后缀名

    import  os
    a = os.path.join('./123/456/','1.py')
    b = os.path.split(a)
    c = os.path.splitext(a)
    d = os.path.splitext('123/456')
    print(b)
    print(c)
    print(d)
    >>>('./123/456', '1.py')
       ('./123/456/1', '.py')
       ('123/456', '')    #没有就为空
    
  • os.path.getsize() 获取文件的大小,即字节数

    import  os
    b = os.path.getsize('123/1.py')
    print(b)
    >>>0  #因为里面什么都木有
    
  • os.path.isdir() 检测是否是一个文件夹是否存在

    import  os
    print(os.path.isdir('123/1.py'))
    print(os.path.isdir('123'))
    print(os.path.isdir('45'))
    >>>False
       True
       False
    #不存在或不为文件夹都会返回False
    
  • os.path.isfile() 检测文件是否存在

    import  os
    print(os.path.isfile('123/1.py'))
    print(os.path.isfile('123'))
    >>>True
       False
    
  • os.path.exists() 检测路径是否存在,既可以检测文件,也可以检测路径

    import  os
    #b = os.path.isdir('123/1.py')
    print(os.path.exists('123/1.py'))
    print(os.path.exists('456'))
    print(os.path.exists('123/456'))
    print(os.path.exists('1/123/456'))
    >>>True
       True
       True
       False 
    
  • os.path.samefile(a,b) 检测a,b这两个path路径是否同时指向了一个目标位置 (两个路径必须真实)

    import  os
    a = './123/1.py'
    b = 'D:\学习笔记\新职课\第五章-模块,包与库训练\第二节\作业/123/1.py'
    print(os.path.samefile(a,b))
    >>>True
    

3.3 shutil 高级的文件操作模块:import shutil

import shutil
  • shutil.copy(要复制的文件,指定目录) :复制文件

    import  shutil
    shutil.copy('123/1.py','456')
    #此时1.py就被拷贝到了456文件夹下
    shutil.copy('123/1.py','456/11.py')
    #此时1.py就被拷贝到了456文件夹下,名字为11.py
    #如果想拷贝到的文件夹不存在则报错
    
  • shutil.copy2 和copy方法一样,可以把拷贝文件到指定目录,不同的是它保留了原文件的信息:操作时间(创造时间、修改时间等)和权限

  • shutil.copyfile() 拷贝文件的内容(打开文件,读取内容,写入到新的文件中)

  • shutil.copytree() 可以把整个目录结构和文件全部拷贝到指定目录中,但是要求指定的目标目录必须不存在

    import  shutil
    shutil.copytree('123','456/789')
    #之前为空的456文件夹中就多了一个789文件夹,里面是123文件夹里的所有内容【就是把123拷过来并且重命名为789】
    【注意!如果只拷贝到456就会报错,因为要求拷贝到的指定的目录必须不存在!】
    
  • shutil.rmtree() 删除整个文件夹

    import  shutil
    shutil.rmtree('456/789')
    #此时就把刚刚拷贝过来的789文件夹删掉啦
    
  • shutil.move() 移动文件或文件夹到指定目录,也可以用于修改文件夹或文件的名称

    import  shutil
    shutil.move('123/456','457')
    #此时把123下的456修改成了和123同目录的457
    【那么和os.rename()有什么区别呢?】
    【下面这个图就是区别,大概意思就是shutil.move()比os.rename()更强一点8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKoWYL8J-1593491968468)(D:\学习笔记\放在typora里的图片\235FFA12-82DA-4f2e-A5CA-E36EF0FA313B.png)]

4.zipfile 压缩模块:import zipfile

import zipfile
zipfile.ZipFile(路径包名,'w'(压缩)或'r'(解压))
  • 压缩文件的操作:zipfile.ZipFile(路径包名,‘w’)

    import  zipfile
    with zipfile.ZipFile('yasuo.zip','w') as myzip:
        myzip.write('data.txt') #必须一个一个分开写,在一个括号里写多个文件,只会压缩最后一个文件进压缩包
        myzip.write('test.txt')
    #用with关键字就不用再写个close语句了
    #此时在工作目录下就创建了yasuo.zip,里面就是date.txt和test.txt这俩文件
    #如果创建的压缩包名已经存在,则会覆盖
    
  • 解压文件的操作:zipfile.ZipFile(路径包名,‘r’)

    import zipfile
    with zipfile.ZipFile('yasuo.zip','r') as myzip:
        myzip.extractall()   #默认为当前工作目录,也可以在括号里写其他目录
    #此时就把压缩包里的文件解压到当前文件夹,如果文件已经存在,则会覆盖
    
    myzip.extractall()是解压全部
    myzip.extract()是只提取一个,括号里必须写要提取的文件名
    
  • 如何压缩当前文件夹中的所有文件?

    【第一种方法:】

    import  zipfile,os
    with zipfile.ZipFile('yasuo.zip','w') as myzip:
        a = os.listdir('./')
        for i in a:
            myzip.write(i)
    #此时就把当前工作目录里的所有文件和文件夹都压缩到了yasuo.zip文件里
    
  • 使用shutil模块进行压缩:【第二种方法】

    shutil.make_achive(参数1,参数2,参数3)
    #参数1:创建的压缩文件名称
    #参数2:指定的压缩格式:zip,tar
    #参数3:要压缩的文件或文件夹目录,可不写,默认为当前工作目录
    
    import  shutil
    shutil.make_archive('yasuo','zip')
    #此时就把当前工作目录里的所有文件和文件夹都压缩到了yasuo.zip文件里
    

le
with zipfile.ZipFile(‘yasuo.zip’,‘r’) as myzip:
myzip.extractall() #默认为当前工作目录,也可以在括号里写其他目录
#此时就把压缩包里的文件解压到当前文件夹,如果文件已经存在,则会覆盖


```python
myzip.extractall()是解压全部
myzip.extract()是只提取一个,括号里必须写要提取的文件名
  • 如何压缩当前文件夹中的所有文件?

    【第一种方法:】

    import  zipfile,os
    with zipfile.ZipFile('yasuo.zip','w') as myzip:
        a = os.listdir('./')
        for i in a:
            myzip.write(i)
    #此时就把当前工作目录里的所有文件和文件夹都压缩到了yasuo.zip文件里
    
  • 使用shutil模块进行压缩:【第二种方法】

    shutil.make_achive(参数1,参数2,参数3)
    #参数1:创建的压缩文件名称
    #参数2:指定的压缩格式:zip,tar
    #参数3:要压缩的文件或文件夹目录,可不写,默认为当前工作目录
    
    import  shutil
    shutil.make_archive('yasuo','zip')
    #此时就把当前工作目录里的所有文件和文件夹都压缩到了yasuo.zip文件里
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值