一些模块

collections模块

''''''

# 具名元组
from collections import namedtuple

# point = namedtuple('坐标',['x','y'])  # 第一个参数传的是对后面元组的描述  第二个参数可以是可迭代对象
point = namedtuple('坐标', 'x y z')  # 第二个参数可以为字符串,但是每个字符都要用空格隔开
# point = namedtuple('坐标','xyz')  # 这里没有将字符串字符分隔开,只能穿一个值
# p = point(2,4)  # 给x,y进行传参,传入值2和4
p = point(1, 2, 3)  # 坐标(x=1, y=2, z=3)
# 可以通过p.x 取出出入的值




# 队列(先进先出)
import queue
res = queue.Queue()  # 生成队列对象 可以往里面添加值
res.put('cly')  # 往队列中传值
res.put('clysb')
res.put('clydsb')

# 从队列中取值
print(res.get())
print(res.get())
print(res.get())
print(res.get())  # 当队列中的值取完时,再取,程序会在原地等待,等到取到队列中的值 才会结束




# deque双端队列
from collections import deque

res = deque([1, 2, 3])
'''
# 双端队列需要掌握的方法
# append appendleft
# pop    popleft
# insert
'''
res.append('a')  # 在队列右边添加值
res.appendleft('c')  # 在队列左边添加值
r = res.pop()  # 从右边弹出值  在括号内添加值时,会报错
l = res.popleft()  # 从左边弹出值
# 双端队列有个很大的缺点,他能从中间添加值,这是一般队列没有的功能
res.insert(1, 'b')  # deque([1, 'b', 2, 3])  根据索引位置任意插值




# 有序字典
from collections import OrderedDict

# 在Python3中比较难看出有序字典,在python2中看的更加清晰
# order_1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# print(order_1)
order_d2 = OrderedDict()
order_d2['x'] = 1
order_d2['y'] = 2
order_d2['z'] = 3





# defaultdict(默认字典)
from collections import defaultdict
my_dict = defaultdict(list)  # 后续该字典中新建的key对应的value默认就是列表  每个键对应不同的列表
print(my_dict['aaa'])  # 为空列表
my_dict1 = defaultdict(int)
print(my_dict1['name'])  # 为数字0
my_dict2 = defaultdict(dict)
print(my_dict2['name'])  # 为空字典
my_dict3 = defaultdict(bool)
print(my_dict3['name'])  # 想都不用想 这为False
# 小练习
values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dic1 = defaultdict(list)
for i in values:
    if i >= 66:
        dic1['k1'].append(i)
    else:
        dic1['k2'].append(i)
print(dic1)



# Counter
from collections import Counter
s = 'asdgdfgjsdljgfjsdfklsjdf'
i = Counter(s)  # 循环打印字符串,将每个字母与出现的次数以k:v形式存储
# print(i)  # Counter({'d': 5, 's': 4, 'f': 4, 'j': 4, 'g': 3, 'l': 2, 'a': 1, 'k': 1})

时间模块

# 共两个模块一个为time 另一个为datetime
# time
'''
三种表现形式
    1.时间戳
    2.格式化时间(就是我们平常看到的时间)
    3.结构化时间
'''
import time
# print(time.time())  # 距离1970年1月1日0点0时0分0秒的秒数

# 格式化时间
# print(time.strftime('%Y-%m-%d %H:%M:%S'))  # y需要大写  后面的小时分钟秒都需要大写
# print(time.strftime('%Y-%m-%d %X'))        # 小时分钟秒都可以用大写x来代替
print(time.strftime('%Y-%m',time.localtime()))
# 时间元组  time.localtime()









import datetime
# 获取本地时间
# 年月日
now_date = datetime.date.today()
print(now_date)  # 2019-07-18
# 年月日时分秒
now_time = datetime.datetime.today()
print(now_time)  # 2019-07-18 21:41:53.346249

random模块

# 共两个模块一个为time 另一个为datetime
# time
'''
三种表现形式
    1.时间戳
    2.格式化时间(就是我们平常看到的时间)
    3.结构化时间
'''
import time
# print(time.time())  # 距离1970年1月1日0点0时0分0秒的秒数

# 格式化时间
# print(time.strftime('%Y-%m-%d %H:%M:%S'))  # y需要大写  后面的小时分钟秒都需要大写
# print(time.strftime('%Y-%m-%d %X'))        # 小时分钟秒都可以用大写x来代替
print(time.strftime('%Y-%m',time.localtime()))
# 时间元组  time.localtime()









import datetime
# 获取本地时间
# 年月日
now_date = datetime.date.today()
print(now_date)  # 2019-07-18
# 年月日时分秒
now_time = datetime.datetime.today()
print(now_time)  # 2019-07-18 21:41:53.346249

os模块

# os模块是跟操作系统打交道的模块
import os

BASE_DIR = os.path.dirname(__file__)
TANK_DIR = os.path.join(BASE_DIR, 'tank老师精选')  # 拼接绝对路径
tank_list = os.listdir(TANK_DIR)  # 查看文件夹中有什么文件 返回的是列表  文件夹中没有内容时,返回空list


# os.mkdir('tank')  # 创建文件夹


print(os.path.exists('111'))  # False  查兰文件夹是否存在
print(os.path.exists('tank'))  # True
print(os.path.exists(r'D:\py\day16\tank老师精选\tank-448.txt'))  # True  查看文件是否存在


print(os.path.isfile(r'D:\py\day16\tank老师精选\111'))  # 只能判断文件 不能判断文件夹  False
print(os.path.isfile(r'D:\py\day16\tank老师精选\tank-448.txt'))  # 只能判断文件 不能判断文件夹  True


# os.rmdir(r'D:\py\day16\tank老师精选\111')  # 只能删空文件夹


print(os.getcwd())  # 获取当前目录
os.chdir(r'D:\py\day16\tank老师精选')  # 切换当前目录
print(os.getcwd())  # D:\py\day16\tank老师精选 已经切换到tank老师精选目录


print(os.path.getsize(r'D:\py\day16\tank老师精选\tank-448.txt'))  # 获得文件大小  字节个数


# 练习题  让用户选择想看哪部
'''
while True:
    movie_tank = os.listdir('tank老师精选')
    for i,j in enumerate(movie_tank):
        print(i+1,j)
    choice = input('请选择你想看哪一部?').strip()
    if not choice.isdigit():
        print('输入有误')
        continue
    choice = int(choice)
    if choice in range(1,len(movie_tank)+1) :
        BASE_DIR = os.path.dirname(__file__)
        MOVIE_DIR = os.path.join(BASE_DIR, 'tank老师精选')
        look_file = os.path.join(MOVIE_DIR,movie_tank[choice-1])
        with open(look_file,'r',encoding='utf-8') as f:
            res = f.read()
            print(res)
    else:
        print('不在选择范围中')
'''

sys模块

import sys  # 与python打交道的模块
# sys.path.append()  将某个路径添加到环境变量中
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('用户不存在 无法执行当前文件')
subprocess 子进程
# 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'))

 

序列化模块
''''''
'''
序列化
    序列:字符串
    序列化:将其他数据转化为字符串
    反序列化:字符串转换为其他数据
'''
# json模块(********************)
# 所有语言都支持json
# 支持的数据类型很少  字符串 列表 字典 整型 元组(转成列表)  布尔值


# pickle模块(****)
# 只支持python
# python中所有数据类型都支持


import json

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

dump  
load
'''

d = {'name': 'clydsb'}
res = json.dumps(d)  # {"name": "clydsb"}  json格式字符串为双引号
res1 = json.loads(res)
print(res1, type(res1))  # {'name': 'clydsb'} <class 'dict'>

with open('clysb,txt', 'w', encoding='utf-8') as f:
    json.dump(d, f)  # 将d转为字符串并写入文件

with open('clysb,txt', 'r', encoding='utf-8') as f:
    res = json.load(f)  # 反序列化只能读一条信息
    print(res)  # {'name': 'clydsb'}

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

t = (1, 2, 3, 4)  # 元组会转换为列表
print(json.dumps(t))

# pickle
import pickle

d1 = {'name': 'clydsb'}
res = pickle.dumps(d)  # 将对象直接转成二进制
print(pickle.dumps(d))
res1 = pickle.loads(res)
print(res1, type(res1))

# 用pickle操作文件的时候 文件的打开模式必须是b模式
with open('cly', 'wb') as f:
    pickle.dump(d1, f)
with open('cly', 'rb') as f:
    res = pickle.load(f)
    print(res, type(res))

 

 
上一篇:第一次


下一篇:通过OutputStream在文件中进行输入