常用模块的内置方法

一:collection模块

作用:在常见的数据类型上又衍生出一些新的数据类型

  (1)nametuple(具名元组):

    (1)常规元组里面存放的都是数据 但是不能像字典似的给里面的数据进行描述

    (2)具名元组可以对元组里面的数据进行描述

例如:

from  collections import namedtuple

# point = namedtuple('坐标',['x','y'])  # 参数一为描述性信息 参数二为可迭代对象
# p = point(1,2)                        # 上传的参数 必须与可迭代对象里包含的参数相等
# print(p)                              # 坐标(x=1, y=2)

card = namedtuple('扑克牌',['color','number'])
p = card('','A')
print(p)                            # 扑克牌(color='♠', number='A'

 

  (2)deque(双栈队列):

     (1)双栈队列 

     (2)其可以对列表里的元素进行双向添加删除

例如:

from collections import deque
# 
number = deque([1,2,3,4])
number.append(66)
print(number)       # deque([1, 2, 3, 4, 66])

number = deque([1,2,3,4])
number.appendleft(66)
print(number)       # deque([66, 1, 2, 3, 4]) 头部添加数据
# 
number = deque([1,2,3,4])
number.pop()
print(number)       # deque([1, 2, 3])

number = deque([1,2,3,4])
number.popleft()
print(number)       # qeque([2, 3, 4])
# 
number = deque([1,2,3,4])
number.insert(1,'six')
print(number)        # deque([1, 'six', 2, 3, 4])
'''
 PS:
(1)双栈队列不应该支持索引插入值 只能首尾进行操作
(2)deque有点特殊
# '''
deque双栈队列

 

  (3)orderdict(有序字典):

    (1)常见的字典是无序的

    (2)有序字典可以确定key_value顺序

例如:

from collections import OrderedDict

user = OrderedDict({'name':'SR','age':18})

print(user)    # OrderedDict([('name', 'SR'), ('age', 18)])

 

  (4)defaultdict

    (1):如果字典不存在 可以返回一个默认值 而不报错

例如:

from collections import defaultdict

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

my_dict = defaultdict(list)   # 后续key所对应的value都是列表

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)
print(my_dict)      # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})

PS:

(1)其不像fromkey当元素都只想一个列表的键值对的值都加入同一个列表中

(2)其创建列表是动态创建的 且不同的key对应不同的列表

 

  (5)counter

    (1)其会以字典的键值对进行存储

    (2)其中键值对的key为容器中的某元素 value为在容器中出现的次数

例如:

from collections import Counter

s =Counter ('asdasdadsasdasd')
print(s) # Counter({'a': 5, 's': 5, 'd': 5}

 

二:时间模块

  (1)time模块

    (1)time.sleep:使程序暂停运行 让CPU停止工作

 

  (2)三种表现形式

    (1)时间戳

      作用:表示从当前时间距离1970年unix元年经过多久时间

例如:

import time

print(time.time())     # 1563450970.2688 表示时间S

  

  (2)格式化时间:

    作用:根据某些格式可以给用户展示相应的时间

例如:

print(time.strftime('%Y-%m-%d'))             # 2019-07-18 年是大写
print(time.strftime('%Y/%m/%d'))             # 2019/07/18 格式可以任意书写

print(time.strftime('%Y-%m-%d %H:%M:%S'))   # 2019-07-18 19:59:46
print(time.strftime('%Y-%m-%d %X'))         # 2019-07-18 20:00:06 %X 等价于%H:%M:%S

 

  (3)结构化时间:

    作用:显示年月日时分秒第几周低几天等

import time

print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=20, tm_min=8, tm_sec=24, tm_wday=3, tm_yday=199, tm_isdst=0)

 

 (4)格式化转换方式:

 

  (5)datetime

    (1)自定义时间:

例如:

res = datetime.date(2018,12,15)
print(res) # 2018-12-15

  (2)获取年月日/年月日时分秒

例如:

res = datetime.date.today()
print(res) # 2019-07-18

res1 = datetime.datetime.today()
print(res1) # 2019-07-18 20:41:03.345300

  (3)获取单独日期:

例如:

res1 = datetime.datetime.today()
print(res1.year)         # 2019
print(res1.month)        # 7
print(res1.day)          # 18
print(res1.hour)         # 20
print(res1.weekday())    # 3表示周四 默认0-6 0表示周一
print(res1.isoweekday()) # 4 周四 默认1-7

 

(4)timedelta:

  作用:对时间进行操作

例如:

tday = datetime.date.today() # 2019-7-18
# 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点
tdelta = datetime.timedelta(days=7)
print(tdelta+tday)  # 2019-07-25

PS:

日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象

 

三:random模块

作用:根据用户给的条件随机生成一些数据

    (1)random:随机生成0-1的小数

例如:

import random

print(random.random()) # 0.006161018732437573
print(random.random())   # 0.783492866987172

  

  (2)uniform:随机在一定范围生成小数

例如:

print(random.uniform(3,5)) # 4.822084029788739

  

  (3)randint:在范围内随机选取整数

例如:

import random

print(random.randint(1,10))  # 10

print(random.randint(1,10))  # 4

 

  (4)choic:随机选择一个元素返回

例如:

print(random.choice([1,'SR',(5465)]))   # 5465
print(random.choice([1,'SR',(5465)]))   # SR

 

  (5)shuffle:将元素数据打乱

例如:

number = [1,2,3,4]
res = random.shuffle(number)
print(number) # [4, 2, 1, 3]
print(number) # [2, 4, 1, 3]

 

练习:随机生成验证码

例如:

# 形参控制用户进行多少位的验证
def index(n):
    code = ''
# 打印随机验证码的位数
    for i in range(n):
        # 生成随机大写字母
        upper_str = chr(random.randint(65,90))
        # 生成随机小写字母
        lower_str = chr(random.randint(97,122))
        # 生成随机数字 并且由于要和字符串组合在一起 因此转换成字符串的格式
        number_str = str(random.randint(0,9))
        # 从上述随机数中进行选择并且组合在一起
        # += 因为上述是range循环打印每次打印一个值 +=在原来打印的基础上在拼接一个新的
        code += random.choice([upper_str,lower_str,number_str])

        # 将字符串返回
    return code
index()
随机生成验证码

 

 

四:os模块

 作用:与操作系统打交道

os.

  (1)listdir:将当前路径文件夹下所有的文件展示出来

例如:

import os
print(os.listdir(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\老师们的作品'))

  

  (2)dirname(__file__):返回上一次目录

例如:

import os
print(os.path.dirname(__file__)) # E:/编程语言/老男孩Python语言视频/第十六天/代码/day16

 

  (3)removdirs:如果目录为空 则删除 并且返回上一级目录

例如:

import os
os.removedirs(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131') 

  

  (4)mkdir:生成一个目录

例如:

os.mkdir(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131')

 

 (5)remove:删除一个文件夹

 (6)rename:将文件夹重命名

 (7)getcwd:查看当前工作目录

 (8)chdir:切换目录 相当于windows cd

 

os.path

 (9)split:将文件夹与文件目录切割 返回元组

例如:

res = os.path.split(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131')
print(res) # ('E:\\编程语言\\老男孩Python语言视频\\第十六天\\代码\\day16', '131')

 

  (10)exists:查看文件路径是否存在 存在返回True

例如:

res = os.path.exists(r'E:\编程语言\老男孩Python语言视频\第十六天\代码\day16\131')
print(res) # True

 

  (11)isfile:查看文件夹下文件是否存在

 

  (12)join:文件路径进行拼接

 

  (13)getsize:查看文件的大小

 

五:sys模块

作用:与python解释器打交道

 

 (1)append:将路径加入文件环境变量中

 (2)exit:如果错误退出 则会有提示

   (3)version:查看python解释器的版本

 (4)path:查看系统环境变量

 

六:序列化模块

序列:字符串

序列化:将其它数据转换成字符串

反序列化:将字符串转换成其它数据类型

 

优点:

(1)可以将其余数据类型转成字符串存入文件中 当从文件读取还可以返回原来的数据类型

(2)可以跨语言环境交换信息 例如在python中是字典 传到JAV中 JAVA可以转换成自己独有的类型

 

模块内置方法:

(1)json

优点:所有语言都支持json格式

缺点:支持的数据类型比较少

 

(2)pickle

优点:所有数据类型都支持

缺点:只能在python中使用

 

使用方法:

json:

dumps(序列化):将其余数据类型转换成json格式的字符串

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

例如:

import json

user_info = {'name':'SR','age':18}
res = json.dumps(user_info)
print(res,type(res)) # {"name": "SR", "age": 18} <class 'str'>
# PS:双引号为json格式独有的

res1 = json.loads(res)
print(res1,type(res1)) # 'name': 'SR', 'age': 18} <class 'dict'>

 

dump(序列化):将数据类型进行序列化 存入文件中

load(反序列化):将文件类型进行反序列化 转换成其余数据类型

user_info = {'name':'SR','age':18}

with open('userinfo','w',encoding='utf-8') as f:
     json.dump(user_info,f) # {"name": "SR", "age": 18}

with open('userinfo','r',encoding='utf-8') as f:
    res = json.load(f) 
    print(res,type(res))  #   {'name': 'SR', 'age': 18} <class 'dict'>

PS:不能多次反序列化 因为被导入文件都在同一行中

 

元组序列化成集合:

例如:

t = (1,2,3,4)
res = json.dumps(t)
print(res) # [1, 2, 3, 4]

 

注意点:

name = {'name':'吉泽明步'}
print(json.dumps(name))                     # {"name": "\u5409\u6cfd\u660e\u6b65"}
print(json.dumps(name,ensure_ascii=False)) # {"name": "吉泽明步"}

 

pickle:

dumps:将数据序列化成二进制

loads:将二进制转换成原数据

例如:

name = {'name':'吉泽明步'}
res = pickle.dumps(name)
print(res) # b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x0c\x00\x00\x00\xe5\x90\x89\xe6\xb3\xbd\xe6\x98\x8e\xe6\xad\xa5q\x02s.'
res1 = pickle.loads(res)
print(res1) # {'name': '吉泽明步'}

 

dump:必须是b模式下 且不能加入utf-8 因为pickle转换成的是二进制

load:将文件类型转换成数据类型

name = {'name':'吉泽明步'}
with open('user','wb') as f:
    pickle.dump(name,f)

with open('user','rb') as f:
    res = pickle.load(f)
    print(res) # {'name': '吉泽明步'}

 

posted @ 2019-07-18 18:57  SR丶  阅读(275)  评论(0编辑  收藏  举报