zoukankan      html  css  js  c++  java
  • 深入模块

    一、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下为"	
    ",Linux下为"
    "
    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('
    ')  #每一次清空原行。
        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'>
    

      

    生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
  • 相关阅读:
    为django项目创建虚拟环境
    linux下安装python
    使用scrapy-crawlSpider 爬取tencent 招聘
    linux基础3
    Scrapy
    scrapy-Redis 分布式爬虫
    scrapy-redis(一)
    Linux中文件上传使用rz
    centos 7 安装nginx
    MySQL 5.7 zip 文件安装过程
  • 原文地址:https://www.cnblogs.com/panshao51km-cn/p/11210454.html
Copyright © 2011-2022 走看看