模块

colectiong模块

在python内置的数据类型(dict list set tuple)的基础上,collections模块还提供了几个额外的数据类型
Counter deque defaultdict namedtuple OrderedDict
Counter     计数器  用来计数的
deque      双端队列 不过这个两头都能进能出
defaultdict   带有默认值的字典
namedtuple    具名元组 直接生成可以使用名字来访问元素内筒的tuple
OrderedDict 有序的字典

namedtuple

# namedtuple(名字,其中的数据参数)     扑克牌    坐标     一个城市的信息
from collections import namedtuple
# 坐标
point = namedtuple('坐标是',['x','y','z'])
point_num = point(2,3,3)
print(point_num)  # 坐标是(x=2, y=3, z=3)
print(point_num.x)  # 2
print(point_num.y)  # 3
print(point_num.z)  # 3


# 扑克
Poker = namedtuple('poker','flower num')
Poker_type = Poker('♠','A')
print(Poker_type) # poker(flower='♠', num='A')
print(Poker_type.flower) # ♠
print(Poker_type.num) # A


城市
City = namedtuple('USA','name hobby')
City_n = City('Koby','basketball')
print(City_n) # USA(name='洛杉矶', hobby='Koby basetball')
print(City_n.name) # Koby
print(City_n.hobby) # basketball
 

队列

# 队列   先进先出(FIFO    frist in frist out)   不能插队
import queue
q = queue.Queue()    # 生成队列对象
q.put('frist')   # 向队列中添加值
q.put('second')
q.put('third')

print(q.get())  # frist 向队列要值
print(q.get())  # second
print(q.get())  # third
print(q.get()) # 如果队列中的值取完了 程序不会报错 而是在哪里跌倒就在那里歇会 直到从队列中拿到值

deque

# deque 双端队列       append    appendeleft      pop     popleft
# from collections import deque   #####自行解注释
q = deque(['a','b','c'])
q.append('哈哈')  # 追加   直接加在源列表最后
q.appendleft('你猜我在那里')  # 在原列表的最开始添加元素
print(q)  # deque(['你猜我在那里', 'a', 'b', 'c', '哈哈'])
#
p = deque([1,2,3])
print(p.pop())  # 按照索引弹出最后一个元素
print(p.popleft())  # 弹出第一个索引对应的值
#
p = deque([1,2,3])
p.insert(2,'你把我插队在哪里')  # 特殊     双端队列可以在根据索引在任意位置插值
print(p)  # deque([1, 2, '你把我插队在哪里', 3])
p.insert(4,'你把我插在哪里')
print(p)  # deque([1, 2, '你把我插队在哪里', 3, '你把我插在哪里'])
#
dic = dict([('name','james'),('age',20)])  # 创建字典的方式  一般不用
print(dic)  # {'name': 'james', 'age': 20}

OrderedDict

OrderedDict    有序字典   python中的字典是无序的    但是用了这个  是按照你书写的顺序了
from collections import OrderedDict
dic = OrderedDict([('name','james'),('age','20')])
print(dic)  # OrderedDict([('name', 'james'), ('age', '20')])
dic1 = OrderedDict()
dic1['x'] = 1
dic1['y'] = 2
dic1['z'] = 3
print(dic1)  # OrderedDict([('x', 1), ('y', 2), ('z', 3)])

defaultdict

num = [1,2,3,4,5,6,7,8,9]
dic = defaultdict(list)
for i in num:
    if i < 6:
        dic['k1'].append(i)
    else:
        dic['k2'].append(i)
print(dic)  # defaultdict(<class 'list'>, {'k1': [1, 2, 3, 4, 5], 'k2': [6, 7, 8, 9]})

my_dict1 = defaultdict(str) print(my_dict1['xxx']) # 返回空 my_dict2 = defaultdict(bool) print(my_dict2['kkk']) # False my_dict3 = defaultdict(tuple) print(my_dict3['mmm']) # () my_dict4 = defaultdict(int) print(my_dict4['yyy']) # 0 print(my_dict4['xxx']) # 0

Counter

   先将字符串内容循环取值  加入字典的key     再计算次数  当作字典的value存入字典
from collections import Counter
s = 'asdasdasdasdasd'
res = Counter(s)
print(res)  # Counter({'a': 5, 's': 5, 'd': 5})   一次尽量两步

time模块

时间的三种表现形式

  1  时间戳    time.time   当前时间距离1970-01-01  00:00:00  过去的秒数

import time
print
(time.time()) # 1563447416.9686005

  2  格式化时间  time.strftime    按照一定的格式输出需要的时间     2019-07-18  18:46:46    例如这样子的

    

print(time.strftime('%Y-%m-%d'))  # 2019-07-18
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2019-07-18 18:56:15
print(time.strftime('%Y-%m-%d %X')) # 2019-07-18 18:56:15 %X等价于%H:%M:%S

  3  结构化时间   time.localtion      当前的是按照一定的结构        time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=18, tm_min=47, tm_sec=55, tm_wday=3, tm_yday=199, tm_isdst=0)

格式化时间的字符串

%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

python中时间日期格式化符号:
格式化时间

datetime模块

import datetime
print(datetime.date.today())  # 2019-07-18   今天的日期     年月日的形式输出
print(datetime.datetime.today())  # 2019-07-18 18:54:18.496601    也是今天是日期  年月日时分秒



res = datetime.date.today()
print(res.year) # 2019
print(res.month) # 7
print(res.day) # 18
print(res.weekday()) # 3 0-6表示星期  0表示周一
print(res.isoweekday())  # 1-7表示星期 7就是周日
 

时间的运算

# 天数     timedalta
local_time = datetime.date.today()  # 2019-07-18          # 日期对象
num_time = datetime.timedelta(days=10)      # 10天     运算天数
res = local_time+num_time  # 今天过后10天
res1 = local_time-num_time  #  今天之前10天 
print(res)  # 2019-07-28
print(res1)  # 2019-07-08

UTC时间    根据格林威治的时间

dt_today = datetime.datetime.today()
dt_now = datetime.datetime.now()
dt_utcnow = datetime.datetime.utcnow()
print(dt_utcnow)  # 2019-07-18 11:09:33.884600
print(dt_now)  # 2019-07-18 19:09:33.884600
print(dt_today)  # 2019-07-18 19:09:33.884601

random模块(随机数)

import random

print(random.randint(0,9))  # 随机一个范围内的整数
print(random.random())  # 小数点后面17位      随机一个0-1之间的小数
print(random.choice([1,2,3,4,5,6,7,8,9]))  # 随机选取一个列表内的数    适用于摇号

# shuffle  #   洗牌   数据随机打乱
num = [1,2,3,4,5,6,7,8,9]
random.shuffle(num)
print(num)

随机验证码联系

import random
verification_num = input('输入验证码位数:')
verification_num = int(verification_num)

def verification(verification_num):
    verification_code = ''
    for num in range(verification_num):
       upper_str = chr(random.randint(65,90))
       lower_str = chr(random.randint(97,122))
       random_int = str(random.randint(0,9))
       verification_code += random.choice([upper_str,lower_str,random_int])
    print(verification_code)
    return verification_code
verification(verification_num)
View Code

os模块

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

import os
# os 使用方法
os.remove()     删除一个文件
os.rename('原名字','修改后名字')    修改文件名字
os.mkdir('文件名')   生成一个单级的空目录
os.rmdir('文件名')  删除一个单级的空目录   目录不为空 无法删除  会报错
os.listdit('文件名')    列出指定文件下所有的文件和子目录  包括隐藏文件





os.makedirs('文件1/文件2/文件3')    生成一个多层的目录
os.
removedirs('文件名')      目录为空的  就删除   并返回上一级目录  还空   就继续删  以此类推
os.stat('path/filename')  获取文件/目录信息
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
# os.path  使用方法

os.path.exists(path) 检查文件路径是否存在,存在返回Ture 不存在返回False os.path.ahspath(path) 返回规范的绝对路径 os.path.isabs(path) 判断路径是不是绝对路径 是 返回 Ture os.path.isfile(path) 判断是不是一个存在的文件 是 返回Ture 否则返回None os.path.isdir(path) 判断是否是存在的目录 存在返回Ture 否则返回None os.path.dirname(path) 返回路径文件的目录 os.path.split(path) 路径切分成目录和文件名 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小

sys模块

sys模块是和python解释器交互的一个接口

import sys

sys.path.append()    将某个路径添加在环境变量中


sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(
1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称

序列化模块

序列化

  序列  字符串

  序列化  其他数据类型转换成字符串的过程

  反序列化  将字符串转成其他数据类型

json

dumps和loads

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
View Code

dunp和load

d = {"name":"zhang",'age':23}
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))  # {'name': 'zhang', 'age': 23} <class 'dict'>
View Code

ps:若在序列化的信息中含有中文字符,不想由任何我改变的转化,可以用ensure_ascii命令

pickle

dumps和loads

import pickle
d = {"name":"zhang",'age':23}
res = pickle.dumps(d)  # 将对象直接转成二进制
print(pickle.dumps(d))

#b'x80x03}qx00(Xx04x00x00x00nameqx01Xx05x00x00x00zhangqx02Xx03x00x00x00ageqx03Kx17u.'

res1 = pickle.loads(res)
print(res1,type(res1))  # {'name': 'zhang', 'age': 23} <class 'dict'>
View Code

dump和load

import pickle
d = {"name":"zhang",'age':23}  
with open('userinfo_1','wb') as f:  # 用pickle操作文件时打开文件模式必须为b模式
    pickle.dump(d,f)

with open('userinfo_1','rb') as f:
    res = pickle.load(f)
    print(res,type(res))  # {'name': 'zhang', 'age': 23} <class 'dict'>
View Code

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'))
View Code
原文地址:https://www.cnblogs.com/xuzhaolong/p/11210207.html