深入模块

一、collection模块

  collections是python内建的一个集合模块。collections模块还提供了几个额外的数据类型:counter、deque、defaultdict、namedtuple、orderredDict

  namedtuple可以很方便的定义一种数据类型,他具备tuple的不可变性,也可以根据属性来引用,非常方便。

from collections import namedtuple


point = namedtuple('坐标’,['x','y'.'z'])  #第二个参数既可以传可迭代对象也可以传字符                                             
point = namedtuple('坐标‘,x,y,z)        #  串,但字符串跟字符串之间以空格隔开
p = point(1,2,5)    #注意元素个数必须跟namedtuple第二个参数里面的值数量一致
print(p)
print(p.x)
print(p.y)
print(p.z)

 结果:

  deque:双端队列

  list的缺点:list在插入元素(insert)的时候是非常慢的,因为你插入一个元素,那么此元素后面的所有元素索引都得改变,当数据量很大的时候,那么速度就很慢了。

  双端队列可以弥补list的这个缺点。双端队列除了实现list的append和pop外,还支持appendleft()和popleft(),这样就可以非常高效的往头部添加或删除元素。

from collections import deque
dq = deque([1,2,3])
dq.append(4)
dq.append(5)
dq.appendleft(6)
print(dq)  # deque([6, 1, 2, 3, 4, 5])
print(dq.pop()) # 5
print(dq.popleft()) # 6

  双端队列原理图:

  defaultdict:为字典设置默认值

from collections import defaultdict


dic = defaultdict(list)   # 为字典设置默认值为空列表(defaultdict里面的参数必须是可调用的)
dic = defaultdict(1)    # 报错,因为数字 1 不可调用
print(dic['a'])  # []
dic['b'].append(2)
print(dic['b']) # [2]

二、时间模块

  时间相关操作,时间有三种表现方式:

  时间戳      1970年1月1日之后的秒,即:time.time()

  格式化的字符串   2014-11-11 11:11     即:time.strftime('%Y-%m-%d')

  结构化时间      元组包含了:年、日、星期等    time.struct_time      即:time.localtime()

import time


print(time.time())    #返回当前系统时间戳(1970年1月1日0时0分0秒开始)
print(time.ctime())    #返回当前系统时间
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))#将struct_time格式转化成指定的字符串格式
print(time.strptime("2016-05-17","%Y-%m-%d"))     # 将字符串格式转换成struct_time格式
import datatime
current_time = datetime.datetime.now()


print(datatime.data.today())         #输出格式为2019-07-18
print(currut_time)                        #输出为2019-07-18 21:25:52.646318
print(current_time.timetuple())        #返回struct_time格式
print(current_time.replace(2008,8,8))#2008-08-08 21:25:52.646318


str_to_date = datetime.datetime.strptime("28/7/08 11:20","%d/%m/%y %H:%M")  #将字符串转换成日期格式
new_date = datetime.datetime.now() + datetime.timedelta(days=10)         #比现在加10天
new_date = datetime.datetime.now() + datetime.timedelta(days=-10)       #比现在减10天
new_date = datetime.datetime.now() + datetime.timedelta(hours=-10)       #比现在减10小时
new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)      #比现在+120s
print(new_date)                    

三、random模块

  随机数:

import random
 
print(random.random())          #用于生成一个0到1的随机符点数: 0 <= n < 1.0
print(random.randint(1,2))      #用于生成一个指定范围内的整数
print(random.randrange(1,10))   #从指定范围内,按指定基数递增的集合中获取一个随机数
print(random.uniform(1,10))     #用于生成一个指定范围内的随机符点数
print(random.choice('nick'))    #从序列中获取一个随机元素
li = ['nick','jenny','car',]
random.shuffle(li)              #用于将一个列表中的元素打乱
print(li)
li_new = random.sample(li,2)    #从指定序列中随机获取指定长度的片断(从li中随机获取2个元素,作为一个片断返回)
print(li_new)

  生成随机验证码:

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模块用于提供系统级别的操作

os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
os.curdir                   返回当前目录: ('.')
os.pardir                   获取当前目录的父目录字符串名:('..')
os.makedirs('dir1/dir2')    可生成多层递归目录
os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()                 删除一个文件
os.rename("oldname","new")  重命名文件/目录
os.stat('path/filename')    获取文件/目录信息
os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep                  用于分割文件路径的字符串
os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")   运行shell命令,直接显示
os.environ                  获取系统环境变量
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所指向的文件或者目录的最后修改时间

  

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

五、sys模块

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

  手写进度条

# 手写进度条
import sys,time
for ii in range(101):
    sys.stdout.write('\r')  #每一次清空原行。
    sys.stdout.write("%s%%  |%s|"%(int(int(ii)/100*100),int(int(ii)/100*100) * '#'))     #一共次数除当前次数算进度
    sys.stdout.flush()      #强制刷新到屏幕
    time.sleep(0.05)  

六、序列化模块

  json,用于字符串和python数据类型间进行转换

  pickle,用于python特有的类型和python的数据类型间进行转换

  Json模块提供了四个功能:dumps、dump、loads、load

  pickle模块提供了四个功能:dumps、dump、load、loads

  dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存,到给定的文件中。当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到他们本来的格式。

  dumps()函数执行和dump() 函数相同的序列化。取代接受流对象并将序列化后的数据保存到磁盘文件,这个函数简单的返回序列化的数据。

  loads()函数执行和load() 函数一样的反序列化。取代接受一个流对象并去文件读取序列化后的数据,它接受包含序列化后的数据的str对象, 直接返回的对象。

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

  

猜你喜欢

转载自www.cnblogs.com/panshao51km-cn/p/11210454.html