zoukankan      html  css  js  c++  java
  • 巨蟒python全栈开发-第23天 内置常用模块2

    一.今日主要内容
    1.nametuple:(命名元组,本质还是元组)
    命名元组=>类似创建了一个类
    结构化时间其实是个命名元组
    2.os
    主要是针对操作系统的
    一般用来操作文件系统
    os.makedirs() 可以一次性创建多级目录
    os.rmdir() 删除一个文件夹

    os.path.dirname() 获取文件夹
    3.sys(后边学习包和模块的基础)
    主要针对的是我们的python解释器
    sys.path(重点中的重点)

    4.序列化
    把一个对象拍散 叫序列化
    把拍散的内容整合回对象,反序列化

    (1)pickle(重点//把大象拍散)
    把一个对象进行序列化操作

    1.dumps() 把对象序列化成字节
    2.loads() 把字节反序列化成对象

    3.dump() 把对象序列化写入文件
    4.load() 把文件中的内容反序列化成对象
    (2)json(重点中的重点)就是一种数据格式,不是一门技术.(在python中,就是一种模块)
    #json和pickle操作是一样,但是数据的格式化是不同的
    json你可以认为是python中的字典,有一点点的不一样
    区别:
    python:True,False,None
    json:true,false,null

    1.dumps() 把对象序列化成json
    2.loads() 把json反序列化成对象

    3.dump() 把对象序列化写入文件
    4.load() 把文件中的内容反序列化成对象
    二.今日内容大纲
    1.命名元组
    2.os模块
    3.sys模块
    4.pickle模块
    5.json模块
    三.今日内容详解
    1.命名元组(namedtuple)
    (1)
    from collections import namedtuple
    #
    p=namedtuple('Point',['x','y'])
    #对象
    '''#等价于下面
    # class Point:
    #     def __init__(self,x,y):
    #         self.x=x
    #         self.y=y
    '''
    p1=p(10,20)
    print(p1)
    print(p1.x)
    print(p1.y)
    #在这里我们把Point看作是类,p看作是对象
    '''
    结果:
        Point(x=10, y=20)
        10
        20
    '''
    (2)
    from collections import namedtuple
    car=namedtuple('Car',['chepai','color','pailiang'])
    c=car('京C-10000','绿色','1.8T')
    print(c)
    
    # 结果:Car(chepai='京C-10000', color='绿色', pailiang='1.8T')
    
    import time
    print(time.localtime())
    
    #结果:time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=20,
    # tm_min=16, tm_sec=11, tm_wday=3, tm_yday=361, tm_isdst=0)
    #结构化时间其实是个命名元组
    2.os模块
    (1)
    import os       #可以一次性创建多级目录
    # 直接帮助创建  //必须要记住.很常用
    os.makedirs('baby/baobao/donggua/黄晓明')   #可以一次性创建多级目录
    
          # 下面代码行在运行时必须注释掉上边的那行代码
    os.makedirs('baby/安哥拉/特斯拉/黄晓明')   #可以一次性创建多级目录

    (2)

    import os
    os.mkdir(r'dongguaxiaobai') #上层文件夹必须存在,创建一个文件
    #注意这个地方一定要添加上r

    (3)

    import os
    os.removedirs('donggua')    #目录不是空,不能删除
    os.removedirs('baby/安哥拉/特斯拉/黄晓明')   #安哥拉/特斯拉/黄晓明全部删除了
    #可以帮我们删除当前这个目录级中的所有空文件夹

    (4)

    #创建可以多创建,但是删除不可以多删除,
    import os
    os.rmdir('baby/baobao/donggua/黄晓明')
    #一次只能删除一个'黄晓明'文件

    (5)#用法介绍1

    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式 打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    
    
    os.system("bash command")  运⾏shell命令,直接显示
    os.popen("bash command).read()  运⾏shell命令,获取执行结果
    os.getcwd() 获取当前工作⽬目录,即当前python脚本工作的目录路路径
    os.chdir("dirname")  改变当前脚本工作⽬目录;相当于shell下cd #

    #用法介绍2

    stat()属性解读(linux系统用的比较多,用到的时候再说)
    
    stat结构
    
    st_mode: inode 保护模式 
    st_ino: inode 节点号。 
    st_dev: inode 驻留的设备。 
    st_nlink: inode 的链接数。 
    st_uid: 所有者的用户ID。 
    st_gid: 所有者的组ID。 
    st_size: 普通⽂文件以字节为单位的大小;包含等待某些特殊文件的数据。 
    st_atime: 上次访问的时间。 
    st_mtime: 最后一次修改的时间。 
    st_ctime: 由操作系统报告的"ctime"。
    在某些系统上(如Unix)是最新的元数据更改的时间,
    在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
    (6)
    #查看当前文件夹内所有的内容
    import os
    os.system('dir')    #运⾏shell命令,直接显示
    #注意,上面这条命令,会显示一些看不懂的字符

    (7)超级重点知识(popen)

    import os
    print(os.popen('dir'))  #结果:<os._wrap_close object at 0x00000195BF1475C0>
    print(os.popen('dir').read())   #运⾏shell命令,获取执行结果
    #显示正常的当前目录
    #后期学习到运维的时候会用到,服务器之间的链接等等,然后敲命令
    '''
    #上边第二条语句执行的结果:
     驱动器 F 中的卷是 新加卷
     卷的序列号是 DC0A-B9CD
    
     F:Python_workspace_S18week5day23 内置模块2 的目录
    
    2018-12-27  20:49    <DIR>          .
    2018-12-27  20:49    <DIR>          ..
    2018-12-27  20:18             3,263 01 今日内容大纲
    2018-12-27  20:05             3,859 02 作业讲解.py
    2018-12-27  20:17               863 03 命名元组.py
    2018-12-27  20:49             3,296 04 os模块.py
    2018-12-27  12:43               783 05 pickle模块.py
    2018-12-27  12:53                77 06 json模块.py
    2018-12-27  20:33    <DIR>          baby
    2018-12-27  20:29    <DIR>          donggua
    2018-12-27  17:42               931 test.py
    2018-12-27  19:57                90 userinfo
    2018-12-27  15:23             1,145 今日作业.py
    2018-12-27  12:53               296 汪峰.xml
                  10 个文件         14,603 字节
                   4 个目录 151,124,221,952 可用字节
    '''

    (8)

    #getcwd()  获取当前工作目录
    import os
    print(os.getcwd())      #结果:F:Python_workspace_S18week5day23 内置模块2
    #也就是当前工作文件夹的绝对路径

    (9)

    import os
    os.chdir('baby')    #chdir()代表更换当前的工作目录
    print(os.getcwd())  #F:Python_workspace_S18week5day23 内置模块2aby
    #目录发生了改变
    f=open('userinfo',mode='r',encoding='utf-8')    #这样就不能正常工作了
    for line in f:
        print(line)
    
    f=open('../userinfo',mode='r',encoding='utf-8')    #回到上一层目录,这样就可以正常工作了
    for line in f:
        print(line)

    (10)

    #用法介绍3

    os.path 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的大⼩小
    
     特殊属性: os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

    (11)

    #os.path  和路径相关的内容
    import os
    print(os.path.abspath('userinfo'))  #把相对路径改写成绝对路径

    (12)

    # 将path分割成目录和文件名,2元素以元组返回
    import os
    print(os.path.abspath('userinfo'))  #把相对路径改成绝对路径
    #结果:F:Python_workspace_S18week5day23 内置模块2userinfo
    print(os.path.split(r'F:Python_workspace_S18week5day23 内置模块2aby'))
    #结果:('F:\Python_workspace_S18\week5\day23 内置模块2', 'baby')
    print(os.path.dirname(r'F:Python_workspace_S18week5day23 内置模块2aby'))
    #结果:F:Python_workspace_S18week5day23 内置模块2
    print(os.path.basename(r'F:Python_workspace_S18week5day23 内置模块2aby'))
    #结果: baby
    整合结果:
    F:Python_workspace_S18week5day23 内置模块2userinfo
    ('F:\Python_workspace_S18\week5\day23 内置模块2', 'baby')
    F:Python_workspace_S18week5day23 内置模块2
    baby

    (13)

    #exists 判断是否存在  (返回结果是False&true)
    import os
    print(os.path.exists(r'F:Python_workspace_S18week5day23 内置模块2aby'))
    #结果:True

    3.sys模块

    (1)

    # 
     回车 
     换行
    #sys模块
    #因为变量上边写的是win32
    
    import sys
    print(sys.platform)
    #结果:win32

    (2)超级重点的知识:

    #模块部分的重点,也就是path的问题python
    #返回模块的搜索路径
    import sys
    print(sys.path)     #找模块.必须要记住,模块的搜索路径
    sys.path.append('F:Python_workspace_S18week5day21 继承')
    print(sys.path)
    #在文件路径列表中添加目录
    #跨文件,找路径可以考虑这个东西
    
    import master
    master.chi()

    master.py

    def chi():
        print('大神很能吃')
    #结果:
    ['F:\Python_workspace_S18\week5\day23 内置模块2', 'F:\Python_workspace_S18', 'C:\Python36\python36.zip', 'C:\Python36\DLLs', 'C:\Python36\lib', 'C:\Python36', 'C:\Python36\lib\site-packages', 'G:\PyCharm 2018.2.3\helpers\pycharm_matplotlib_backend']
    ['F:\Python_workspace_S18\week5\day23 内置模块2', 'F:\Python_workspace_S18', 'C:\Python36\python36.zip', 'C:\Python36\DLLs', 'C:\Python36\lib', 'C:\Python36', 'C:\Python36\lib\site-packages', 'G:\PyCharm 2018.2.3\helpers\pycharm_matplotlib_backend', 'F:\Python_workspace_S18\week5\day21 继承']
    大神很能吃

    (3)

    sys.path.clear()    #这句话一定不能写

    4.pickle模块

    (1)

    import pickle
    class Elephant:
        def __init__(self,name,weight,height):
            self.name=name
            self.weight=weight
            self.height=height
    
        def tiaoxi(self):
            print(f"{self.name}大象特别喜欢调戏人")
    e=Elephant('宝宝','1.85T','175')
    e.tiaoxi()
    
    #序列化
    bs=pickle.dumps(e) #把对象进行序列化
    print(bs)
    
    Bs=b'x80x03c__main__
    Elephant
    qx00)x81qx01}qx02(Xx04x00x00x00nameqx03Xx06x00x00x00xe5xaex9dxe5xaex9dqx04Xx06x00x00x00weightqx05Xx04x00x00x00185Tqx06Xx06x00x00x00heightqx07Xx03x00x00x00175qx08ub.'
    
    #反序列化
    dx=pickle.loads(bs)  #反序列化,得到的是大象
    dx.tiaoxi()
    dx=pickle.loads(Bs)
    dx.tiaoxi()
    
    #xml解析比较麻烦

    (2)

    import pickle
    class Elephant:
        def __init__(self,name,weight,height):
            self.name=name
            self.weight=weight
            self.height=height
        def tiaoxi(self):
            print(f"{self.name}大象特别喜欢调戏人")
    # (1-1)#第一步:写
    # e1=Elephant('宝宝','1.85T','175')
    # e2=Elephant('宝贝','1.20T','120')
    # f=open('大象',mode='wb')
    # #下面也是序列化
    # pickle.dump(e1,f)   #123   没有s(dumps)的这个方法是把对象打散写入到文件
    # pickle.dump(e2,f)   #123   没有s(dumps)的这个方法是把对象打散写入到文件
                        #写入文件的内容,我们是看不懂的//序列化的内容不是给人看的
    #前一个参数是对象,后一个参数是文件句柄
    
    #注意,如果两个都想写入的话,需要都要打开
    (1-2)#第二步:读
    # f=open('大象',mode='rb')
    # obj1=pickle.load(f)
    # obj2=pickle.load(f)
    # obj1.tiaoxi()
    # obj2.tiaoxi()
    
    
    (1-3)
    #存的时候没有问题,读的时候就有问题了
    #排除读完文件的异常
    # f=open('大象',mode='rb')
    # while 1:
    #     try:
    #         obj=pickle.load(f)
    #         obj.tiaoxi()
    #     except Exception:
    #         break
    
    
    (2-1)
    #将对象放入列表中,
    e1=Elephant('宝宝','1.85T','175')
    e2=Elephant('宝贝','1.20T','120')
    lst=[e1,e2]
    #
    pickle.dump(lst,open('大象',mode='wb'))
    
    #
    lst=pickle.load(open('大象',mode='rb'))
    for dx in lst:
        dx.tiaoxi()

    5.json模块

    (1)

    import json
    dic = {"baby":None, "hxm":False, "syy":"小白杨"}
    s = json.dumps(dic) # json处理中文的问题
    print(s)
    #结果:{"baby": null, "hxm": false, "syy": "u5c0fu767du6768"}

    (2)

    import json
    dic = {"baby":None, "hxm":False, "syy":"小白杨"}
    s = json.dumps(dic, ensure_ascii=False) # json处理中文的问题
    # s = json.dumps(dic, ensure_ascii=False).encode('utf-8')
    #在这里我们转换成字节就乐意传输数据了
    print(s)            #成功的解决了中文问题
    print(type(s))      #注意这个转换的是字符串
    #结果:{"baby": null, "hxm": false, "syy": "小白杨"}
    #<class 'str'>

    (3)

    import json
    d = json.loads('{"baby": null, "hxm": false, "syy": "史杨杨"}')
    print(d)        #结果;{'baby': None, 'hxm': False, 'syy': '史杨杨'}
    print(type(d))  #结果:<class 'dict'>
    print(d['baby'])#结果:None  #因为这是json里的数据

    (4)

    #一个json文件一般放一个对象
    #如果非要放多个,通过列表的形式,存放数据,注意这个数据中间必须有逗号进行间隔
    import json
    f=open('baby.json',mode='w',encoding='utf-8')
    # json.dump({"baby":None, "hxm":False, "syy":"史杨杨"}, f)
    #写入文件的结果:{"baby": null, "hxm": false, "syy": "u53f2u6768u6768"}
    
    json.dump({"baby":None, "hxm":False, "syy":"史杨杨"}, f, ensure_ascii=False)
    # #写入文件的结果:{"baby": null, "hxm": false, "syy": "史杨杨"}

    (5)#读出结果

    import json
    f = open("baby.json", mode="r", encoding="utf-8")
    obj = json.load(f)
    print(obj)
    结果:[{'baby': None, 'hxm': False, 'syy': '史杨杨'}, {'baby': None, 'hxm': False, 'syy': '史杨杨'}]
  • 相关阅读:
    动态链接库DLL
    异常处理
    内存
    线程同步
    线程基础、线程调度
    笔记摘录:进程、作业
    工具DebugView、PCHunter、Procexp、Procmon
    使用Windbg和VMware来搭建调试内核的环境
    C++智能指针
    AndroidEventBus
  • 原文地址:https://www.cnblogs.com/studybrother/p/10188141.html
Copyright © 2011-2022 走看看