神奇语言 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:\untitled2\a\as.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实现的

 

posted on 2019-01-20 18:40  蠢才  阅读(135)  评论(0编辑  收藏  举报

导航