zoukankan      html  css  js  c++  java
  • 常用内置模块(一)——time、os、sys、random、shutil、pickle、json

    常用内置模块

    一、time模块

    在python中,时间分为3种
           1.时间戳: timestamp,从1970年1月1日到现在的秒数, 主要用于计算两个时间的差
         2.localtime: 本地时间 表示的是计算机当前所在的位置
      3.UTC:世界协调时间

    import time
    
    # 时间戳,以秒做单位
    print(time.time())
    
    # localtime 结构化时间
    print(time.localtime())
    
    # UTC时间
    print(time.gmtime())
    
    # 格式化时间
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
    
    # 时间戳--->结构化
    print(time.localtime(time.time()))
    
    # 结构化--->时间戳
    print(time.mktime(time.localtime()))
    
    time.sleep(5)
    print('weekup')
    View Code

    二、datetime模块

    1、python实现的一个时间处理模块,time用起来不太方便, 所以就有了datetime
    2、优点:datetime相比time,更灵活

    3、timedelta表示时间差
       两个时间差可以加减乘除
       时间差和datetime 可以加减

    # 单独获取某个年月日
    d1 = datetime.datetime.now()
    print(d1)
    print(d1.year)
    print(d1.hour)
    
    # 设定时间点
    d2 = datetime.datetime(2008, 11, 15, 12, 33, 47)
    print(d2)
    
    # 计算两个时间的差
    print(d1 - d2)
    
    # 替换指定时间
    print(d1.replace(year=2017))
    
    # 表示时间差
    print(datetime.timedelta(days=5))
    
    # 时间差与datetime.datetime相加
    print(d1 + datetime.timedelta(days=5))
    print(d1 + datetime.timedelta(weeks=3))
    View Code

    三、random模块

    random()            随机产生一个大于等于0且小于1的小数
    randint(a,b)             随机产生一个在a与b之间的整数,包括a和b
    randrange(a,b)             随机产生一个大于等于a,且小于b的数
    choice([1,2,32,3,2,"哈哈"])          随机选1个
    sample([1,"a",["c","d"]],2)            随机选指定个数
    uniform(1,3)          随机产生一个大于1小于3的小数
    shuffle(列表)       打乱顺序

    import random
    
    # 随机生成    0 <= m < 1的数
    print(random.random())
    
    # 随机生成整数  包含头、尾
    print(random.randint(1, 5))
    
    # 随机选择一个
    print(random.choice([1, 2, 3, 4]))
    
    # 随机取3个
    print(random.sample([1, 2, 'aa', [1, 2, 3]], 3))
    
    # 随机产生一个大于1小于3的小数
    print(random.uniform(1, 2))
    
    # 打乱列表顺序
    l = [1, 2, 's', 'ww', [1, 2], (1, 2, 3)]
    random.shuffle(l)
    print(l)
    View Code

    随机产生一个包含字母数字的9位验证码

    def random_word(n):
        for i in range(n):
            res = str(random.randint(0, 9))
            res2 = chr(random.randint(67, 90))
            choice = random.choice([res, res2])
            print(choice, end='')
    random_word(9)
    随机产生一个验证码

    四、sys模块

    该模块与系统相关,一般用于设计脚本程序
    sys.argv 命令行参数List,第一个元素是程序本身路径,获取cmd输入的参数 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
    import sys
    
    # 第一个元素是程序本身路径
    print(sys.argv)
    
    # 返回模块的搜索路径
    print(sys.path)
    
    # 退出程序
    sys.exit(0)
    View Code

    打印进度条

    def progress(percent, width):
        percent = percent if percent <= 1 else 1
        text = '[%%-%ds]' % (width)  # text = '[%-20s]'
        text = text % ('*' * int(percent * width))
        text = text + '%s%%'
        text = text % (percent * 100)
        print('\r%s' % text, end='')
    
    import time
    import random
    
    cur_filsize = 0
    while True:
        time.sleep(0.5)
        file_size = 10240
        cur_filsize += random.random()*100
        progress(cur_filsize / file_size, 50)
        if cur_filsize >= file_size:
            print()
            print("finish")
            break
    实现打印进度条功能
    import sys
    import time
    
    def progress(percent,width=50):
        if percent >= 1:
            percent=1
        show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
        print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')
    
    data_size=1025
    recv_size=0
    while recv_size < data_size:
        time.sleep(0.1) #模拟数据的传输延迟
        recv_size+=1024 #每次收1024
        percent=recv_size/data_size #接收的比例
        progress(percent,width=70) #进度条的宽度70
    控制台传参打印

    五、os模块

    该模块与操作系统相关,是围绕文件和目录的操作

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

    六、shutil模块

    该模块用于简化文件的高级操作

      主要是:复制,移动,删除,压缩文件

    1、复制文件

     copyfileobj(fsrc, fdst, length=16*1024)

    1 import shutil
    2 shutil.copyfileobj(open("a.txt","r",encoding="utf8"),open("b.txt","w",encoding="utf-8"),length=1024)

    2、压缩文件

    利用shutil来创建压缩文件,仅支持tar和zip格式,内部调用zipFile,tarFile模块实现

    1 import shutil
    2 shutil.make_archive("test","zip",root_dir="D:\脱产三期视频\Day17\代码")

    解压文件

    import zipfile,tarfile
    
    # 解压zip
    z = zipfile.ZipFile(r"D:\脱产三期视频\Day17\test.zip")
    z.extractall()
    z.close()
    
    # 解压tar
    t = tarfile.open(r"D:\脱产三期视频\Day17\test.tar")
    t.extractall()
    t.close()
    解压文件

    七、pickle模块

    1、作用于序列化
      所谓序列化就是将内存中的数据持久化到硬盘
    2、pickle产生的数据 只能由python读取  (跨平台性差)

    3、示例

    import pickle
     
    dic={'name':'alvin','age':23,'sex':'male'}
     
    print(type(dic))#<class 'dict'>
     
    j=pickle.dumps(dic)
    print(type(j))#<class 'bytes'>
     
     
    f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
    f.write(j)  #-------------------等价于pickle.dump(dic,f)
     
    f.close()
    #-------------------------反序列化
    import pickle
    f=open('序列化对象_pickle','rb')
     
    data=pickle.loads(f.read())#  等价于data=pickle.load(f)
     
     
    print(data['age'])
    View Code

    八、json模块

    1、pickle产生的数据,只能由python读取(跨平台性差),因此json随之产生

    2、json 全称 JavaScrip Object Notation,js的对象表示法
         用于处理json格式数据的模块,(数据以什么格式存进去,取出来还是原来的格式)

    3、json格式标准

        json是一种通用的数据交换格式 目前主流的语言都能够轻松解析
        注意: 在使用json格式的时候,数据类型必须按照要求来写,并且不支持python中的元组,True/Flase,'', ''',None

        能存储的有:str,int,float,dic,list,bool

    4、常用方法

    序列化
      dump 处理文件
      dumps 处理字符串
    反序列化
      load 处理文件
      loads 处理字符串

    5、示例

    import json
    
    users = {'name':"音乐会","age":20,"hobbies":("music","movies")}
    
    # 序列化
    print(json.dumps(users))
    json.dump(users,open("users.json","wt",encoding="utf-8"))
    
    # json的反序列化
    jsonstr = json.load(open("users.json","r",encoding="utf-8"))
    print(jsonstr)
     
    博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
  • 相关阅读:
    (8)设计模式-桥接模式
    (6)设计模式-原型模式
    (5)设计模式-原型模式
    hdu4714树形DP+贪心(乱搞)
    hdu1059(背包dp二进制优化)
    uva12558 Egyptian Fractions (HARD version)(迭代深搜)
    hdu4135 Co-prime【容斥原理】
    BZOJ 1509[NOI 2003]逃学的小孩 树形dp
    bzoj1812 [Ioi2005]riv
    bzoj 2243 [SDOI2011]染色(树链剖分+线段树合并)
  • 原文地址:https://www.cnblogs.com/linagcheng/p/9451154.html
Copyright © 2011-2022 走看看