zoukankan      html  css  js  c++  java
  • 神奇语言 python 模块 四

    collections模块

    在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

    1.namedtuple: 生成可以使用名字来访问元素内容的tuple

    命名元祖

    from collections import namedtuple   
    t = namedtuple('time_tupel',['年','月','日','时','分','秒','毫'])
    t1 = t(18,1,12,13,14,56,897)
    print(t1)
    print(t1.年)

    类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:

    namedtuple('名称', [属性list]):
    Circle = namedtuple('Circle', ['x', 'y', 'r'])

    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

    from collections import deque
    deque  双向队列
     队列    FIFO   先进先出    列表  链表
     栈      LIFO   后进先出
    import queue
    q = queue.Queue() # 队列 容器
    q.put('静哥')
    q.put('小强')
    q.put('风扇哥')
    q.put('欢姐')
    q.put('闫书记')
    q.put('棍哥')
    # print(q)  # 队列不能查看
    
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())  #阻塞
    和生成器很像,不是生成器

    3.Counter: 计数器,主要用来计数

    from collections import Counter  # 计数  
    s = ['a','b','c']
    
    c = Counter(s)
    print(c)

    4.OrderedDict: 有序字典

    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

    如果要保持Key的顺序,可以用OrderedDict:

    >>> from collections import OrderedDict
    >>> d = dict([('a', 1), ('b', 2), ('c', 3)])
    >>> d # dict的Key是无序的
    {'a': 1, 'c': 3, 'b': 2}
    >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    >>> od # OrderedDict的Key是有序的
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])

    注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

    5.defaultdict: 带有默认值的字典

    from collections import defaultdict
    lst = [11,22,33,44,55,66,77,88,99,100]
    dic = defaultdict(list)        # 有一点点用
    for i in lst:
        if i > 66:
            dic['k1'].append(i)
        else:
            dic['k2'].append(i)
    print(dic)
    
    def func():
        return 5
    print(func())

    shutil模块

    这个模块就是针对文件和文件夹在做操作,并且还具有压缩包的功能

    拷贝文件可以自己指定模式和编码方式

    import shutil
    shutil.copyfile(r'D:untitled2aas.py', 'f2.log') #目标文件必须存在

    拷贝文件,第一个参数放一个源文件,第二参数放一个要拷贝到那个文件的名字,模式不用管,编码方式默认是utf-8

    仅拷贝权限。内容、组、用户均不变

    shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

    shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

    拷贝文件和权限

    import shutil 
    shutil.copy2('f1.log', 'f2.log')

    递归的去拷贝文件夹

    import shutil
    shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) 
    #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 

    递归的去删除文件

    import shutil
    shutil.rmtree('folder1')

    递归的去移动文件

    import shutil
    shutil.move('folder1', 'folder3')

    shelve模块

    shelve 序列化

    我们之前学了json和pickle模块 这些都是序列化的模块,咱们进行在讲一个序列化的东西 叫做shelve

    你们肯定有个疑问,这个东西和那个类似为什么要讲.是因为这个模块比较简单的,并且你们后期存储数据的时候需要使用数据库,但是当数据较少的时候我们就可以不用通过网络去和数据库进行交互了.直接使用咱们本地的文件就可以了

    import shelve
    f = shelve.open('ss') # 创建了一个文件
    f['name'] = 'alex'   # 字典的增加
    f.close()
    
    f1 = shelve.open('ss',writeback=True)
    f1['name'] = 'baoyuan'
    f1.close()
    
    f = shelve.open('ss')
    print(f['name'])
    
    如果出现了回写不成功的时候在open(writeback=True)
    
    import shelve
    f = shelve.open('ss')
    f['name'] = 'alex'
    f.close()
    
    f1 = shelve.open('ss',flag='r')  # 只读
    f1['age'] = 18
    f1.close()
    
    f2 = shelve.open('ss')
    print(f2['name'])
    print(f2['age'])
    
    shelve 基于pickle实现的
  • 相关阅读:
    用elasticsearch分析中国大学省份分布
    【翻译】Kinect v1和Kinect v2的彻底比较
    翻译 Tri-Ace:在Shader里近似渲染公式
    翻译 基于物理渲染的美术资源设计流程
    翻译 次世代基于物理渲染的反射模型
    关于Depth Bounds Test (DBT)和在CE3的运用
    使用Xcode GPU Frame Caputre教程
    如何使用Xcode分析调试在真机运行的UE4 IOS版游戏
    个人翻译的cedec2010基于物理的光照
    使用Nsight查找CE3的渲染bug
  • 原文地址:https://www.cnblogs.com/zhangguangpei/p/10305356.html
Copyright © 2011-2022 走看看