模块之collections、shutil
collections模块
from collections import 功能
1.from collections import namedtuple(命名元祖)
格式:
from collections import namedtuple
t = namedtuple('元祖名',[可迭代对象])
例1.1:
from collections import namedtuple
t = namedtuple('one_tuple',['a','b','c'])
print(t(1,2,3))
结果:
one_tuple(a=1,b=2,c=3)
t1 = t(1,2,3)
print(t1.a) ---> 1 {t1.b-->2;t1.c--->3}
例1.2:(结构化时间)
from collections import namedtuple
t = namedtuple('time_tuple',['年','月','日','时','分','秒'])
t1 = t(19,1,1,1,1,1)
结果:
time_tuple(年=19,月=1,日=1,时=1,分=1,秒=1)
print(t1.年)-->19
2.from collections import Counter(计数器)
例2.1
from collections import Counter
s = 'abcmkkdmbdcadkmd'
c = Counter(s)
print(c)
结果: (默认按每个字母出现次数来降序排列)
Counter({'d':4,'m':3,'k':3,'a':2,'b':2,'c':2})
例2.2
dic = {}
s = 'abcmkkdmbdcadkmd'
for i in s:
dic[i] = dic.get(i,0)+1
print(dic)
3.from collections import defaultdict(默认字典)
例3.1
from collections import defaultdict
dic = {}
dic = defaultdict(set)
print(dic['key']) --> set(),空集合
例3.2
有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
常规做法:
lst = [11,22,33,44,55,66,77,88,99,90]
dic = {}
for i in lst:
if i > 66:
dic.setdefault('k1',[]).append(i)
else:
dic.setdefault('k2',[]).append(i)
print(dic)
使用defaultdict
from collections import defaultdict
lst = [11,22,33,44,55,66,77,88,99,90]
dic = defaultdict(lst)
for i in lst:
if i > 66:
dic['k1'].append(i)
else:
dic['k2'].append(i)
print(dic)
4.from collections import deque(双向队列)
d = deque()
d.append('小一') append在末尾追加
d.append('小二')
d.append('小三')
d.append('小四')
print(d)
结果为:deque(['小一','小二','小三','小四'])
d = deque()
d.append('小一')
d.appendleft('小二')
d.appendleft('小三')
d.append('小四')
结果为:deque(['小三','小二','小一','小四'])
shutil模块
高级文件模块,有压缩功能
import shutil
shutil.copyfile(r'拷贝的文件路径',r'要拷贝的新路径\新文件名')
第一个参数是原文件,第二个参数是要拷贝的位置
递归文件操作:
import os
import shutil
递归创建文件: os.makedirs('a/b/c/d')
递归拷贝文件: shutil.copytree('a/b/c/d',r'C:\Users\test/a/b/c/d')
递归删除文件: shutil.rmtree(r'C:\Users\test') 有文件也删除
递归移动文件: shutil.move(r'C:\Users\test\a',r'C:\Users\test1')
打压缩包:
import logging
logging.basicConfig(
level = logging.INFO,
format = ('%(asctime)s - %(name)a - [%(lineno)d] - %(message)s'),
)
shutil.make_archive('压缩包名字','格式',logger = loggingerror('创建了一个--的压缩包'))
例:
shutil.make_archive('base_name','zip',logger = logging.error('创建了一个base_name.zip的压缩包'))
解包:
import zipfile
z = zipfile.Zipfile('base_name','r')
z.extractall(path = r'C:\Users\test1') 解包,所有内容

浙公网安备 33010602011771号