1 collections模块
1namedtuple(具名元组)from collections import namedtuple
# point = namedtuple("长方形","chang kuan gao") # 第二个参数可以是字符串,每个字符串可以用空格隔开
point = namedtuple("长方形",["chang","kuan","gao"]) # 第二个可以是可迭代类型
ret = point(100,200,300)
print(ret)
print(ret.chang)
print(ret.kuan)
print(ret.gao)
# 打印结果
# 长方形(chang=100, kuan=200, gao=300)
# 100
# 200
# 300
补充 队列(先进先出)
import queue
"""
遵循先进先出
添值用put()
取值用get()
"""
q = queue.Queue() # 注意queue后面跟的方法第一个字母大写
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
#返回结果
#1
#2
#3
2 deaue(双端队列)左端可以存值取值,右端也可以存值取值
与上面的队列相比,双端队列他的取值存值是通过append(右边添加),appendleft(左边泰添加),pop(右边删除),popleft(左边删除)
而普通队列是通过put(存值),get(取值)
from collections import deque
q = deque([1,2,3,4,5,6])
q.appendleft(1)
q.appendleft(1)
q.appendleft(1)
q.appendleft(1)
q.appendleft(1)
q.appendleft(2)
q.appendleft(2)
q.appendleft(2)
q.appendleft(2)
q.appendleft(2)
q.insert(1,23)
q.insert(1,23)
q.insert(1,23)
q.insert(1,23)
q.insert(1,23)
q.insert(1,23)
print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())
print(q.popleft())
print(q.popleft())
print(q.popleft())
print(q.popleft())
print(q.popleft())
print(q.popleft())
print(q)
注意;双端队列是可以在指定位置上添加值和取值的
对列的特点是只能在首尾添加值和取值,双端队列的缺点就是在指定位置可以存值,和取值
3 OrderedDict(有序字典)(注意;O大写D大写)模块
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict
:
from collections import OrderedDict
dic = {'a':'1','b':'2','c':'3'}
print(dic) # 在终端打印出来的结果,是无序的
ret = OrderedDict(dic)
print(ret) # 在终端打印出来的是有序的
ret1 = OrderedDict() # 创建一个有序的字典
ret1["x"] = 1
ret1['y'] = 2
ret1['z'] = 3
for key in ret1:
print(key)
print(ret1)
打印结果
# {'a': '1', 'b': '2', 'c': '3'}
# OrderedDict([('a', '1'), ('b', '2'), ('c', '3')])
# x
# y
# z
# OrderedDict([('x', 1), ('y', 2), ('z', 3)])
4 defaultdict(
有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90.
..],将所有大于
66
的值保存至字典的第一个key中,将小于
66
的值保存至第二个key的值中。
即: {
'k1'
: 大于
66
,
'k2'
: 小于
66
}
)
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
defaultdict字典解决方法
5 Counter(Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。)
c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
2 时间模块
1 time.time()(时间戳)
2 time.strftime()(格式化时间)
%Y 年
%m 月
%d 天
%H 时
%M 分
%S 秒
之间的格式符号可以靠自己喜欢来写
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %X')) # %X等价于%H:%M:%S
print(time.strftime('%H:%M'))
print(time.strftime('%Y/%m'))
3 localtime()(结构时间)
转换关系
import time
print(time.localtime(time.time()))
res = time.localtime(time.time())
print(time.time())
print(time.mktime(res))
print(time.strftime('%Y-%m',time.localtime())) # 以年-月的形式转换出格式化模式
print(time.strptime(time.strftime('%Y-%m',time.localtime()),'%Y-%m')) # 转换为结构模式
4 datetime模块
date.today()年月日
datetime.today()年月日时分秒
import datetime
print(datetime.date.today()) # date>>>:年月日
print(datetime.datetime.today()) # datetime>>>:年月日 时分秒
res = datetime.date.today()
res1 = datetime.datetime.today()
print(res.year)
print(res.month)
print(res.day)
print(res.weekday())
3 random模块
randomint(n,b)随机的取一个数字,包含首尾
print(random.randint(1,6))
random() 随机的取0到1的小数
print(random.random())
choice([....]) 摇号,随机的从列表中取一个数
print(random.choice([1,2,3,4,5,6]))
shuffle() 打乱顺序,洗牌
ret3 =[1,2,3,4,5,6,7]
random.shuffle(ret3)
print(ret3)
验证码
import random
def func(n):
count = ""
for i in range(n):
upper_str = chr(random.randint(65,90))
lower_str = chr(random.randint(97,122))
randon_int = str(random.randint(0,9))
count += random.choice([upper_str,lower_str,randon_int])
return count
n = func(4)
print(n)
4 os 模块
os.psah.dirname(__file__) 将路径调到本文件的上一层
os.path,join() 第一个参数是路径,第二个参数是你想要的拼的路径
os.mkdir() 自动创建文件
os.path.exists() 判断文件是否存在,判断文件夹是否存在
os.path.isfile() 判断文件是否存在
os.rmdir() 删除空文件
os.getcwd() 就向乌班图的cd
os.chdir() 切换到当前的路径
os.path.getsize() 获取文件大小(字节数)
5 sys模块
import sys
# sys.path.append() # 将某个路径添加到系统的环境变量中
# print(sys.platform)
# print(sys.version) # python解释器的版本
print(sys.argv) # 命令行启动文件 可以做身份的验证
if len(sys.argv) <= 1:
print('请输入用户名和密码')
else:
username = sys.argv[1]
password = sys.argv[2]
if username == 'jason' and password == '123':
print('欢迎使用')
# 当前这个py文件逻辑代码
else:
print('用户不存在 无法执行当前文件')
6 序列化,和反序列化(json,pickle)模块
1 json(整形,字符串,列表,字典,布尔,元组准换成列表可以与其他语言匹配数据)
doups 将数据类型转换成json内型数据
loads 将json型数据转换成源类型
doup 可以在文本模式将数据类型转换成json类型存入文件中
load 可以在文本模式将j文本中的json类型存数据转换成原文件
2 pickle(python一切数据类型,只能在python中用)
方法与上面json一样
用pickle打开文件必须是以b模式打开
7 subprocess
1.用户通过网络连接上了你的这台电脑
2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
3.获取用户命令 里面subprocess执行该用户命令
4.将执行结果再基于网络发送给用户
这样就实现 用户远程操作你这台电脑的操作
while True:
cmd = input('cmd>>>:').strip()
import subprocess
obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# print(obj)
print('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))