常用模块

collections模块

  在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。  

  namedtuple(具名元组)

  可以表示不变集合,可以用具名元组来记录一个城市的信息,一个点的二维坐标也可以表示,还可以用坐标和半径表示一个圆

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p.y
2



>>> from collections import namedtuple
>>> City = namedtuple('City', 'name country population coordinates')  # 第一个是类名,第二个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串
>>> tokyo = City('Tokyo', 'JP', 36.933, (35.689722, 139.691667)) 
>>> tokyo
City(name='Tokyo', country='JP', population=36.933, coordinates=(35.689722, 139.691667))
>>> tokyo.population 
36.933
>>> tokyo.coordinates
(35.689722, 139.691667)
>>> tokyo[1]
'JP'


#namedtuple('名称', [属性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])

 

 

时间模块

  时间模块的三中表现形式:

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

    2,格式化时间   格式化的时间字符串(Format String): ‘1999-12-06’

    3 ,结构化时间   )元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

 

 

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)



# 生成随机验证码

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

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模块是与操作系统交互的一个接口

 

import os
# BASE_DIR = os.path.dirname(__file__)
# MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品')
# movie_list = os.listdir(MOVIE_DIR)
# while True:
#     for i,j in enumerate(movie_list,1):
#         print(i,j)
#     choice = input('你想看谁的啊(今日热搜:tank老师)>>>:').strip()
#     if choice.isdigit():  # 判断用户输入的是否是纯数字
#         choice = int(choice)  # 传成int类型
#         if choice in range(1,len(movie_list)+1):  # 判断是否在列表元素个数范围内
#             # 获取用户想要看的文件名
#             target_file = movie_list[choice-1]
#             # 拼接文件绝对路径
#             target_path = os.path.join(MOVIE_DIR,target_file)
#             with open(target_path,'r',encoding='utf-8') as f:
#                 print(f.read())



# os.mkdir('tank老师精选')  # 自动创建文件夹
# print(os.path.exists(r'D:\Python项目\day16\rion老师精选'))  # 判断文件是否存在
# print(os.path.exists(r'D:\Python项目\day16\老师们的作品\tank老师.txt'))  # 判断文件是否存在
# print(os.path.isfile(r'D:\Python项目\day16\tank老师精选'))  # 只能判断文件 不能判断文件夹
# print(os.path.isfile(r'D:\Python项目\day16\老师们的作品\tank老师.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\老师们的作品\tank老师.txt'))  # 字节大小
# with open(r'D:\Python项目\day16\老师们的作品\tank老师.txt',encoding='utf-8') as f:
#     print(len(f.read()))

 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('用户不存在 无法执行当前文件')

序列化模块

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

写入文件的数据必须是字符串

基于网络传输的数据必须是二进制

 d = {'name':'jason'}   字典
    str(d)




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

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


    pickle模块(****)
        只支持python
        python所有的数据类型都支持
"""
import json
"""
dumps:序列化 将其他数据类型转成json格式的字符串
loads:反序列化 将json格式的字符串转换成其他数据类型

dump load
"""
# 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))

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


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


# d1 = {'name':'朱志坚'}
# print(json.dumps(d1,ensure_ascii=False))







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

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

 

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

 

posted @ 2019-07-18 17:29  小肥海  阅读(152)  评论(0编辑  收藏  举报