模块学习

Posted cpsyche

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块学习相关的知识,希望对你有一定的参考价值。

一.  collections模块 

collections模块提供了几个额外的数据类型:namedtuple、deque、Counter、OrderedDict和defaultdict等

1.namedtuple:具名元组

技术图片
from collections import namedtuple

point = namedtuple("point","x y z")
#  第二个参数也可以是字符串,字符串之间以空格隔开
point = namedtuple("point", [x,y,z])
#  第二个参数可以是可迭代对象
p = point(1,2,3)
# 元素的个数必须和第二个参数里的数量一样
print(p)
print(p.x ,p.y ,p.z)

card = namedtuple("扑克牌", "color number")
A= card("", K)
print(A)
print(A.color,A.number)
View Code

 

2.deque模块:双端队列

队列是先进先出(FIFO:first in first out)

queue队列:

技术图片
import queue

q = queue.Queue() # 生成队列

q.put(first) # 向队列添加元素
q.put("second")
q.put("third")

print(q.get())# 获取队列元素
print(q.get())
print(q.get())# 队列元素为空,程序会原地等待,直到拿到值为止
View Code

 

deque 双端队列:

技术图片
from collections import deque

q = deque ("abc")  # deque括号内的应该是个可迭代对象,会自动把字符串转换成列表
q.appendleft("zxc") # 左添加
q.append("ppp")  # 右边添加
q.insert(2,"666") # 特殊点:双端队列可以根据索引在任意位置插值
print(q.pop()) # 右边取出
print(q.popleft()) #左边取出
print(q.popleft())
print(q.popleft())
View Code

 

3.OrderdDict :有序字典

OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

技术图片
from collections import OrderedDict

order_d = OrderedDict([(a,1),(b,2),(c,3)])
# 生成一个有序字典并赋值
order_d1 = OrderedDict() # 生成有序字典
order_d1[x] = 1 # 按key赋值
order_d1[y] = 2
order_d1[z] = 3

for i in order_d1:
    print(i)
View Code

 

4. deafultdict: 

defaultdict的作用:在于当字典里的key不存在但被查找时,返回的是一个默认值

技术图片
from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)  # 后续该字典中新建的key对应的value默认就是列表
print(my_dict[aaa]) # 当key键不存在时,会自动创建,并且值为空,不会报错
for value in  values:
    if value>66:
        my_dict[k1].append(value)
    else:
        my_dict[k2].append(value)
print(my_dict)

my_dict1 = defaultdict(int) # 括号里是value的类型,默认为空
print(my_dict1[xxx])

my_dict2 = defaultdict(bool)# 括号里是value的类型,默认为空
print(my_dict2[kkk])

my_dict3 = defaultdict(tuple) # 括号里是value的类型,默认为空
print(my_dict3[mmm])
View Code

 

5.Counter

  Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。 

技术图片
from collections import Counter

s = abcqwerqrdeabcdabcaba

print(Counter(s))
View Code

 

二.时间模块

1.time模块

三种表现形式

  1.时间戳

  2.格式化时间

  3.结构化时间

时间戳

技术图片
import time
print(time.time())  时间戳,从1970年1月1日0时0分开始计算秒数
View Code

 

格式化时间

 

技术图片
import time

查看当前时间
print(time.strftime(%Y-%m-%d %H:%M:%S))
print(time.strftime(%Y-%m-%d %X))    #%X等价于%H:%M:%S    
View Code

 

结构化时间

 

技术图片
import time
print(time.localtime())
View Code

 

几种格式之间的转换

技术图片

2.datatime模块

 

技术图片
import datetime
print(datetime.date.today())  # 查看当前时间,年月日
print(datetime.datetime.today())  #查看当前时间,年月日时分秒
print(datetime.datetime.now())   #查看当前时间,年月日时分秒
res = datetime.datetime.today()
print(res.year)     #查看哪一年
print(res.month)     #查看哪个月份
print(res.day)     #查看哪一天
print(res.weekday())    #查看周几,0-6表示星期,0表示周一
print(res.isoweekday())  #查看周几,1-7表示星期, 1表示周一
View Code
技术图片
# timedelta对象 = 日期对象 +/- 日期对象
current_time = datetime.date.today()  # 日期对象
timetel_t = datetime.timedelta(days=7)  # timedelta对象
res1 = current_time+timetel_t  # 日期对象
View Code

 

 

三.random模块:随机

 

技术图片
import random

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)
View Code

示例:随机生成一个验证码

技术图片
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)
View Code

 

四.os模块

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

技术图片
os.makedirs(dirname1/dirname2)    可生成多层递归目录
os.removedirs(dirname1)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(dirname)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(dirname)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(dirname)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
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.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回 
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 
os.path.basename(path) 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
View Code

 

五.sys模块

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

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

sys.argv命令行运行

技术图片
import sys
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(用户不存在 无法执行当前文件)
View Code

 

六.序列化模块

json、pickle模块:序列化模块

  序列:字符串

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

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

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

 

json和pickle模块的用法相同,使用范围不同。

json模块

  所有的语言都支持,适合跨语言

  支持的数据类型很少(字符串、列表、字典、整形、元组(转成列表)、布尔值)

pickle模块

  只支持python语言

  python所有的数据类型都支持

json模块:

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

dump load

dumps 和loads的使用

技术图片
import 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))
View Code

 

dump 和load的使用

技术图片
import json

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))
View Code

load不能一次处理多个反序列化

技术图片
import json
with open(userinfo,w,encoding=utf-8) as f:
    json.dump(d,f)  # 装字符串并自动写入文件
    json.dump(d,f)  # 装字符串并自动写入文件

with open(userinfo,r,encoding=utf-8) as f:
    res1 = json.load(f)  # 不能够多次反序列化
    res2 = json.load(f)
    print(res1,type(res1))
    print(res2,type(res2))
View Code

 

处理多个反序列化文件

技术图片
import json

d = 
    "name" : "jason"



with open(userinfo,w,encoding=utf-8) as f:
    json_str = json.dumps(d)
    json_str1 = json.dumps(d)
    f.write(%s\\n%json_str)
    f.write(%s\\n%json_str1)


with open(userinfo,r,encoding=utf-8) as f:
    for line in f:
        res = json.loads(line)
        print(res,type(res))
View Code

 

序列化会把元组转换成列表

技术图片
import json
t = (1,2,3,4)
print(json.dumps(t))
View Code

 

dumps序列化会默认把中文转成\\u的16进制,可以通过ensure_ascii取消转换

技术图片
import json
d1 = name:朱志坚
print(json.dumps(d1,ensure_ascii=False))
View Code

 

pickle模块:使用pickle模块做文件操作的时候,必须使用b模式

dumps 和loads的使用:

技术图片
import pickle
d = name:jason
res = pickle.dumps(d)  # 将对象直接转成二进制
print(pickle.dumps(d))
res1 = pickle.loads(res)
print(res1,type(res1))
View Code

 

dump 和load的使用:

技术图片
import pickle
"""
用pickle操作文件的时候 文件的打开模式必须是b模式
"""
with open(userinfo_1,wb) as f:
    pickle.dump(d,f)

with open(userinfo_1,rb) as f:
    res = pickle.load(f)
    print(res,type(res))
View Code

 

 

 

七.subprocess:子进程模块

用途:

1.用户通过网络连接上了你的这台电脑
2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
3.获取用户命令 里面subprocess执行该用户命令
4.将执行结果再基于网络发送给用户,这样就实现 用户远程操作你这台电脑的操作

技术图片
import sys
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(用户不存在 无法执行当前文件)
View Code

 

以上是关于模块学习的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记-模块

day5模块学习 -- os模块学习

Python学习(22):模块

Python学习---模块和包

Python模块章节学习记录

Python学习笔记三:模块