5.8 shtil 高级的 文件、文件夹、压缩包 处理模块

  • shutil.rmtree 删除目录

    import shutil
    shutil.rmtree(path)
  • shutil.move 重命名;移动文件

    import shutil
    shutil.move('test','ttt')
  • shutil.make_archive 压缩文件夹

    import  shutil
    ​
    shutil.make_archive('cade\asd','zip',r'E:\Python_WorkSpace\day016 模块\abc')
  • shutil.unpack_archive 解压文件

    import  shutil
    ​
    shutil.unpack_archive('abc.zip',extract_dir=r'E:\Python_WorkSpace\day016 模块\abc',format='zip')
    # 练习
    # 1.压缩lizhongwei文件夹 zip
    # 2.放到到 code 目录(默认不存在)
    # 3.将文件解压到D:\x1目录中。
    ​
    import os
    import shutil
    from datetime import datetime
    ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') # 将当前时间转换成字符串
    ​
    if not os.path.exists('code'): # 判断 code 文件目录是否存在
       os.makedirs('code') # 创建 code
    shutil.make_archive(os.path.join('code',ctime),'zip','D:\code\s21day16\lizhongwei') # 压缩文件 在code文件夹中,名称为2019-04-18-17-12-24压缩文件
    ​
    file_path = os.path.join('code',ctime) + '.zip' #被解压文件名称
    shutil.unpack_archive(file_path,r'D:\x1','zip') #解压文件到指定目录
    ​

5.9 json / pickle 序列化

  • 二者优缺点

    • json,优点:所有语言通用;缺点:只能序列化基本的数据类型

      所有字符串都是双引号;最外层只能是列表或字典

      存在字典的key只能是str;不能连续load多次

    • pickle,优点:python中几乎所有的东西都能被序列化(socket对象);缺点:序列化的内容只有python认识

      支持连续load多次

  • 一个特殊的字符串。【长得像列表、字典、字符串、数字、真假】

     +-------------------+---------------+
       | Python            | JSON          |
      +===================+===============+
       | dict              | object        |
       +-------------------+---------------+
       | list, tuple       | array         |
       +-------------------+---------------+
       | str               | string        |
       +-------------------+---------------+
       | int, float        | number        |
       +-------------------+---------------+
       | True              | true          |
       +-------------------+---------------+
       | False             | false         |
       +-------------------+---------------+
       | None              | null          |
       +-------------------+---------------+
  • dumps 序列化,将python的值转换为json格式的字符串(str/bytes类型)。

  • loads 反序列化,将json格式的字符串转换为python的值。

    import pickle
    ​
    v = {1,2,3,4}
    # 序列化,将python的值转换为json格式的字符串。
    val = pickle.dumps(v)
    print(val)
    # 反序列化,将json格式的字符串转换为python的值。
    data = pickle.loads(val)
    print(data,type(data))
    # 示例一
    import json
    v = [1,2,3,4,'frfed','tgrf',[1,3,2]]
    # 序列化,将python的值转换为json格式的字符串。
    v1 = json.dumps(v)
    print(v1,type(v1))  # [1, 2, 3, 4, "frfed", "tgrf", [1, 3, 2]] <class 'str'>
    # 反序列化,将json格式的字符串转换为python的值。
    v3 = json.loads(v1)
    print(v3,type(v3))  # [1, 2, 3, 4, 'frfed', 'tgrf', [1, 3, 2]] <class 'list'>
  • 字典或列表中如有中文,序列化时想要保留中文显示:

    v = {'k1':"asdf",'k2':'中文'}
    ​
    import json
    val = json.dumps(v,ensure_ascii=False)
    print(val) # {"k1": "alex", "k2": "李杰"}
  • dump 将字典以特殊格式写到文件中

  • load 读取文件中内容转换成字典

    v = {'k1':"asdf",'k2':'中文'}
    ​
    import json
    f = open('x.txt',mode='w',encoding='utf-8')
    val = json.dump(v,f)
    print(val) # None
    f.close # {"k1": "asdf", "k2": "\u4e2d\u6587"}
    ​
    import json
    f = open('x.txt',mode='r',encoding='utf-8')
    val = json.load(f)
    f.close
    print(val,type(val)) # {'k1': 'asdf', 'k2': '中文'} <class 'dict'>
    import pickle
    ​
    v = {1,2,3,4}
    f = open('x.txt',mode='wb')
    val = pickle.dump(v,f)
    f.close()
    ​
    f = open('x.txt',mode='rb')
    data = pickle.load(f)
    f.close()
    print(data)

5.10 importlib 根据字符串的形式导入模块。

  模块 = importlib.import_module('utils.redis')
  # 示例一
    import importlib
​
  # 用字符串形式导入模块
  redis = importlib.import_module('utils.redis')
​
  # 用字符串的形式去对象(模块)找到他的成员
  getattr(redis,'func')()
​
​
  # 示例二
  import importlib
​
  path = 'utils.redis.func'
​
  module_path,func_name = path.rsplit('.',maxsplit=1)
  module_object = importlib.import_module(module_path)
​
  getattr(module_object,func_name)()
  • 开放封闭原则

    对配置文件开放

    对源代码封闭

    import importlib
    ​
    middleware_classes = [
       'utils.redis.Redis',
       # 'utils.mysql.MySQL',
       'utils.mongo.Mongo'
    ]
    for path in middleware_classes:
       module_path,class_name = path.rsplit('.',maxsplit=1)
       module_object = importlib.import_module(module_path)# from utils import redis
       cls = getattr(module_object,class_name)
       obj = cls()
       obj.connect()

5.11 collections 加强版数据结构

  1. OrderedDict 有序字典

    # 示例一
    from collections import OrderedDict
    ​
    info = OrderedDict()
    info['k1'] = 123
    info['k2'] = 456
    ​
    print(info.keys()) # odict_keys(['k1', 'k2'])
    print(info.values()) # odict_values([123, 456])
    print(info.items()) # odict_items([('k1', 123), ('k2', 456)])
    ​
    # 示例二
    from collections import OrderedDict
    odic = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(odic) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    for k in odic:
       print(k,odic[k])
  2. deque 双端队列

    ​
  3. defaultDict 默认字典,给value设置一个默认值

    ​
  4. namedtuple 可命名元祖

    应用:创建一个类,这个类没有办法,所有的属性的值都不能修改

    from collections import namedtuple   # 可命名元组
    Course = namedtuple('Course',['name','price','teacher'])
    python = Course('python',19800,'alex')
    print(python)   # Course(name='python', price=19800, teacher='alex')
    print(python.name)  # python
    print(python.price) # 19800

第五章 模块之 shtil 、 json / pickle、importlib、collections的更多相关文章

  1. 常用模块(random,os,json,pickle,shelve)

    常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...

  2. python模块概况,json/pickle,time/datetime,logging

    参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html http://www.cnblogs.com/alex3714/articles/51 ...

  3. day16 常用模块 sys os json pickle

          知识点 os:和操作系统相关sys:和解释器相关 json:和操作JSON(一种数据交换格式)相关pickle:序列化 hashlib:加密算法Collections:集合类型       ...

  4. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  5. Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)

    由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...

  6. python 模块二(os,json,pickle)

    #################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...

  7. Python_Mix*OS模块,序列化模块种的json,pickle

    os.path.basename(path)返回path最后的文件名,如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第一个元素 ret = os.path.ba ...

  8. Python学习系列----第五章 模块

    5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: ...

  9. 第五章 模块之random 、hashlib、time /datetime

    5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块​def get_random_code(length=6 ...

随机推荐

  1. boosting与随机森林

      本文原创,转载请注明出处 http://www.cnblogs.com/gufeiyang 本文主要分两部分,boosting 与 随机森林. “三个臭皮匠顶一个诸葛亮”是说三个不聪明的人集合在一 ...

  2. CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录

    1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的 ...

  3. go中的方法以及自定义类型代码示例

    package main import "fmt" type user struct { name string age int sex string } type admin s ...

  4. Thingsboard开发环境搭建及编译项目

    第一部分:JDK 1,下载JDK, JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  5. Thingsboard Docker关闭后重启服务创建network出错

    因为个人想验证一下thingsboard的数据是否是保存在postgres中,就将postgres容器停止,后想重启则无法重启 我干脆将整个系统删除后重新再来一次,在试的时候发现无法重新创建容器 Cr ...

  6. WEB传参调用EXE

    WEB传参调用EXE 让浏览器运行本地的EXE程序.例如:点击浏览器的一个下载链接,就会打开本地的迅雷. 1)注册表注册 Windows Registry Editor Version 5.00 [H ...

  7. 高通平台打开 dynamic debug方法【学习笔记】

    一.首先在内核的配置文件添加如下的配置: CONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y 二.找到自己平台对应的 device/qcom/xxxx/init.targ ...

  8. linux 查看gpu信息

  9. RTSP、RTMP、HTTP协议

    一.异同1.RSTP.RTMP.HTTP协议共同点RTSP RTMP HTTP都是用在应用层.理论上这三种协议都可以做直播和点播,但直播一般用RTSP和RTMP点播用HTTP.2.RSTP.RTMP. ...

  10. python监控rabbitmq的消息队列数量

    [root@localhost chen]# cat b.py #!/usr/bin/python # -*- coding: UTF-8 -*- import json,time import re ...