常用模块

常用模块

collection模块

namedtuple 具名元组

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

列子

from collection import namedtuple
point = namedtuple('坐标',['x',['y'],['z'])  # 第二个参数既可以传可迭代对象
point = namedtuple('坐标''z y z')  #也可以传字符串 但是字符串之间以空格隔开
p = point(1,2,4)  # 注意元素的个数必须跟nametuple第二个参数里面的值数量一致
print(p)  # 打印出 坐标(x=1, y=2, z=4)
print(p.x)  # 打印出 1

 

card = namedtuple('扑克牌','color number')
card1 = namedtuple('扑克牌',['color','number'])
A = card('♠','A')
print(A)
print(A.color)
print(A.number) #和上面的例子一样

队列queue

import queue  # 队列:先进先出
q = queue.Queue()  # 生成队列对象
q.put('first')  # 往队列中添加值
q.put('second')
print(q.get())  # 向队列要值   first   先进的先出
print(q.get())  # 向队列要值   second
print(q.get())  # 向队列要值 # 如果队列中的值取完了 程序会在原地等待 直到从队列中拿到值才停止

 

deque:双端队列

可以快速的从另外一侧追加和推出对象,使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')  
q.appendleft('y')  # 像左边添加
print(q)
deque(['y', 'a', 'b', 'c', 'x'])
q.insert(0,'哈哈哈')  # 特殊点:双端队列可以根据索引在任意位置插值

 

Counter

计数的,主要用来计数,它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,

其计数作为value。计数值可以是任意的interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

from collections import Counter
c = Counter('sdadsadasdsadsaffa')
print(c) # 打印出 Counter({'a': 6, 's': 5, 'd': 5, 'f': 2})

 

OrderedDict

有序字典,使用dic时,key时无序的。在对dic做迭代时,我们无法确认key的顺序,

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

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

 

 

 

defaultdict:

带有默认值的字典

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。

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)
     # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

 

时间模块

和时间有关系,我们就要用到时间模块。在使用模块之前,应该首先导入这个模块。

三种表现形式

1、时间戳

通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

2、格式化时间

print(datetime.date.today())  # date>>>:年月日
print(datetime.datetime.today()) # datetime>>>:年月日 时分秒

3、结构化时间

 

小练习 计算今天距离今年过生日还有多少天
birth = datetime.datetime(2019,12,21,8,8,8)
current_time = datetime.datetime.today()
print(birth-current_time)

 

 

 UTC时间
dt_today = datetime.datetime.today()
dt_now = datetime.datetime.now()
dt_utcnow = datetime.datetime.utcnow()
print(dt_utcnow,dt_now,dt_today)

 

randow 随机模块

print(random.randint(1,6))  # 随机取一个你提供的整数范围内的数字  包含首尾
print(random.random()) # 随机取0-1之间小数
print(random.choice([1,2,3,4,5,6])) # 摇号 随机从列表中取一个元素
res = [1,2,3,4,5,6]
random.shuffle(res) # 洗牌
print(res)
 生成随机验证码

"""
大写字母 小写字母 数字

5位数的随机验证码
chr
random.choice
封装成一个函数,用户想生成几位就生成几位
"""
def get_code(n):
  code = ''
  for i in range(n):
      # 先生成随机的大写字母 小写字母 数字
      upper_str = chr(random.randint(65,90))
      lower_str = chr(random.randint(97,122))
      random_int = str(random.randint(0,9))
      # 从上面三个中随机选择一个作为随机验证码的某一位
      code += random.choice([upper_str,lower_str,random_int])
  return code
res = get_code(4)
print(res)

 

os模块

os模块是与操作系统交互的一个接口

 os.mkdir('tank老师精选')  # 自动创建文件夹
# print(os.path.exists(r'D:Python项目day16 ion老师精选')) # 判断文件是否存在
# print(os.path.exists(r'D:Python项目day16老师们的作品 ank老师.txt')) # 判断文件是否存在
# print(os.path.isfile(r'D:Python项目day16 ank老师精选')) # 只能判断文件 不能判断文件夹
# print(os.path.isfile(r'D:Python项目day16老师们的作品 ank老师.txt')) # 只能判断文件 不能判断文件夹

# os.rmdir(r'D:Python项目day16老师们的作品') # 只能删空文件夹

# print(os.getcwd())
# print(os.chdir(r'D:Python项目day16老师们的作品')) # 切换当前所在的目录
# print(os.getcwd())

# 获取文件大小
# print(os.path.getsize(r'D:Python项目day16老师们的作品 ank老师.txt')) # 字节大小
# with open(r'D:Python项目day16老师们的作品 ank老师.txt',encoding='utf-8') as f:
#     print(len(f.read()))

 

sys模块

sys模块是与Python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)       退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version       获取Python解释程序的版本信息
sys.path.append() 将某个路径添加到系统的环境变量中
sys.platform       返回操作系统平台名称

序列化模块

什么叫序列化

将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

为什要序列化

因为写入文件的数据必须是字符串 基于网络传输的数据必须是二进制

两个模块

json模块

所有的语言都支持json格式
支持的数据类型很少 字符串 列表 字典 整型 元组(转成列表) 布尔值

pickle模块

只支持python
python所有的数据类型都支持

 

json模块

有四个功能: dumps、dump :序列化 将其他数据类型转成json格式的字符串

loads、load:反序列化 将json格式的字符串转换成其他数据类型

d = {"name":"jason"}
print(d)
res = json.dumps(d)  # json格式的字符串 必须是双引号 >>>: '{"name": "jason"}'
print(res,type(res))
res1 = json.loads(res)
print(res1,type(res1))
d = {"name":"jason"}

with open('userinfo','w',encoding='utf-8') as f:
   json.dump(d,f)  # 装字符串并自动写入文件
with open('userinfo','r',encoding='utf-8') as f:
   res = json.load(f)
   print(res,type(res))

pickle模块

四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

import time
struct_time = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

json模块 与pickle模块的区别

  • json,用于字符串 和 python数据类型间进行转换

  • pickle,用于python特有的类型 和 python的数据类型间进行转换

  • 用pickle操作文件的时候 文件的打开模式必须是b模式

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'))

 

 

原文地址:https://www.cnblogs.com/panyi2019/p/11210752.html