zoukankan      html  css  js  c++  java
  • python 常用模块

    一 time

    time 模块是普通的时间模块

    1、time.time( )

    ​ 时间戳:从 1970 到现在经过的秒数

    作用:用于时间间隔的计算

    import time
    print(time.time()) #1585531035.687209
    

    2、time.strftime( )

    ​ 按照某种格式显示的时间: 2020-03-30 11:11:11

    作用:用于展示时间

    print(time.strftime('%Y-%m-%d %H:%M:%S')) #2020-04-04 19:40:28
    print(time.srtftime('%Y-%m-%d %X')) #2020-03-30 09:18:39
    
    #获取当前的年
    print(time.strftime('%Y')) #2020
    

    3、time.localtime()

    结构化时间

    作用: 用于获取时间的某一部分

    res = time.localtime() 
    print(res)#time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=9, tm_min=19, tm_sec=49, tm_wday=0, tm_yday=90, tm_isdst=0)
    
    print(res.tm_year) #2020
    print(res.tm_yday) #90
    

    补充:

    世界标准时间(结构化)与本地之间(东八区)对比

    print(time.localtime()) #time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=15, tm_min=21, tm_sec=44, tm_wday=0, tm_yday=90, tm_isdst=0)
    print(time.gmtime())  #time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=7, tm_min=20, tm_sec=39, tm_wday=0, tm_yday=90, tm_isdst=0)
    
    #本地址时间(采用上海时间)比世界标准时间快了 8 个小时
    

    时间显示格式为:星期 月份 天数 时间 年(通常用于 linux 系统)

    import time
    print(time.asctime()) #Mon Mar 30 15:46:23 2020
    

    4、时间转换

    image-20200404195458208

    示例:

    结构化时间 --------------》时间戳
    import time
    s_time= time.localtime() 
    print(time.mktime(s_time)) #1585552579.0
    

    时间戳--------------》结构化时间

    tp_time = time.time()
    print(time.localtime(tp_time)) #time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=15, tm_min=25, tm_sec=15, tm_wday=0, tm_yday=90, tm_isdst=0)
    
    print(time.localtime(333333333)) #time.struct_time(tm_year=1980, tm_mon=7, tm_mday=25, tm_hour=8, tm_min=35, tm_sec=33, tm_wday=4, tm_yday=207, tm_isdst=0)
    
    

    结构化时间--------------》格式化的字符串形式的时间

    s_time= time.local()
    print(time.strftime('%Y-%m-%d %H:%M:%S', s_time)) #2020-03-30 15:29:04
    #获取年月
    print(time.strftime('%Y/%m')) #2020/03
    # 获取年月日
    print(time.strftime('%Y-%m-%d'))  #2020-03-30 
    

    格式化字符串时间转换为------------》结构化时间

    print(time.strptime('19888-03-03 11:11:11', '%Y-%m-%d, %H:%M:%S'))
    #time.struct_time(tm_year=1988, tm_mon=3, tm_mday=3, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=3, tm_yday=63, tm_isdst=-1)
    

    必须掌握:format string(格式化时间) <---------->timestamp(时间戳)

    格式化时间与时间戳格式不能直接互相转化,需要通过结构化时间

    格式化时间 ----------》结构化时间-----------------》时间戳

    '''
    '1988-03-03 11:11:11'+7
    '''
    struct_time = time.strptime('1988-03-03 11:11:11', '%Y-%m-%d, %H:%M%s')  #格式化时间转换为结构化时间
    
    timestamp = time.mktime(struct_time) +7 * 86400  #结构化时间转换为时间戳 +7
    print(timestramp) #573966671.0
    

    时间戳 --------------》结构化时间--------------------》格式化时间

    timestamp = time.time()  #时间戳
    struct_time = time.localtime(timestamp) #时间戳转换为结构时间
    res = time.strftime('%Y-%m-%d, %X', struct_time) #2020-03-30 15:42:39
    
    

    二 datetime

    datetime 模块是基于 time 模块封装的一种比较便利的时间模块

    1、获取当前时间

    import datetime
    print(datetime.datetime.now()) #2020-03-30 15:48:20.298178
    
    #世界时间
    print(datetime.datetime.utcnow()) #2020-03-30 07:48:20.298234
    
    # 获取当前年月日
    print(datetime.date.today() #2020-03-31
    
    # 获取当前年月日时分秒
    print(datetime.datetime.today()) #2020-03-31 00:39:08.038798
    

    2、时间加减计算

    日期/时间的计算:
    日期时间 = 日期时间 “+” or “-” 时间对象
    时间对象 = 日期时间 “+” or “-” 日期时间

    print(datetime.datetime.now()) #2020-03-30 09:59:59.554466
    #获取三天后的时间
    print(datetime.datetime.now() + datetime.timedelta(days=3)) #2020-04-02 09:59:59.554513
    #获取一周后的时间
    print(datetime.datetime.now() + datetime.timedelta(weeks=1))#2020-04-06 09:59:59.554529
    
    

    3、时间格式转换

    时间戳转换为格式化时间

    import datetime
    pirint(datetime.datetime.fromtimestamp(333333)) #1970-01-05 04:35:33
    

    时间替换

    c_time = datetime.datetime.now()
    print(c_time)
    print(c_time.replace(minute=3, hour=2)) #时间替换
    
    #结果展示
    '''
    2020-03-31 00:23:27.756616
    2020-03-31 02:03:27.756616
    '''
    

    三 random

    ​ random:python提供的随机取值模块

    1 random.random( ) #(0,1)

    ​ 取大于 0 且小于 1 之间的小数

    import random
    res = random.random()
    #print(res) #0.0013748341683205156
    print(res) #0.2427640714095196
    

    2 random.randint(1, 3 ) #[1, 3]

    取大于等于 1 且小于等于 3 之间的整数

    res = random.randint(1, 3)
    #print(res) #2
    #print(res) #3
    print(res) #1
    

    3 random.randrange(1, 3) #[1, 3)

    取大于等于1且小于 3 之间的整数

    res = random.randrange(1, 3)
    print(res) #1
    print(res) #2
    

    4 random.choice([111, 'aaa', [4,5]])

    取列表中的一个元素: 1或者23或者[4,5]

    res= random.choice([111, 'aaa', [4, 5]])  # 1或者23或者[4,5]
    print(res) #[4,5]
    

    5 random.sample([111,'aaa','bbb', [4,5]])

    取列表中两个元素任意组合成列表

    res = random.sample([111, 'aaa', 'bbb', [4, 5]])
    #print(res) # ['aaa', 111]
    print(res) #[111, 'bbb']
    

    6 random.uniform(1, 3) #(1, 3)

    取大于 1 小于 3 的小数

    res = random.uniform(1, 3)
    print(res) #2.913178536016434
    

    7 random.shuffle( 可迭代对象)

    打乱可迭代对象中的元素,相当于'洗牌'

    item = [1,3,5,7,9]
    res = random.shuffle(item)
    print(res) #[7, 3, 5, 9, 1]
    

    应用:随机验证码

    随机验证码是由字母和数字组成

    字母范围(A-Z) :随机生成字母:通过随机 ASCII 码数字,然后转换为字母

    数字(0-9)

    伪代码:

    import random
    res = ''
    for i in range(6):
      从 26 个大写字母中随机取出一个 = chr(random.randint(65, 90))
      从 10 个数字中随机取出一个 = str(random.randint(0, 9))
      
      随机字符 = ransdom.choice([从26大写字母中随机取出一个,从10个数字中随机取出一个])
      res += 随机字符
    

    示例:

    import random
    
    def make_code(size_num):
        '''
        验证功能
        size_num:验证码字符个数
        '''
        str1 = ''  #验证码
        for i in range(size_num):
            #大写字母
            str_upper = chr(random.randint(65, 90))  # A-Z
            #小写字母
            str_lower = chr(random.randint(97, 122))  # a-z
            #数字
            num = str(random.randint(0, 9)) #0-9
            res = random.choice((str_lower, str_upper, num))
            str1 += res
        return str1
    
    res = make_code(6)
    

    注:在ASCII码中,数字范围:97-122,对应小写字母;数字范围65-90,对应大写字母。

    三 os

    os 模块是与操作系统交互的一个接口

    1、os.listdir('文件夹路径') 或 os.listdir('.')

    获取某 一个文件夹下所有的子文件以及子文件夹的名字

    res = os.list('.')
    print(res) #['笔记.txt', '01 时间模块.py', 'run.py', '04 sys模块.py', '02 random模块.py', 'aaa', '03 os模块.py']
    

    2、os.path.getsize('文件路径')

    获取文件大小(单位:字节)

    print(__file__) #/Users/tophan/Desktop/代码 2/03 os模块.py
    size = os.path.getsize(__file__)
    print(size) #187 字节
    

    3、os.remove( )

    删除一个文件

    4、os.rename('oldname', 'newname')

    重命名文件/目录

    5、os.system('cmd 命令 ')

    应用程序向操作系统发送 'cmd命令'请求 ,返回值是字符

    因为返回值是字符,所以就会涉及字符编码问题

    #查看根目录下的文件目录  应用程序-----》'ls /'
    os.system('ls /') #运行 shell 命令  直接显示
    

    6、os.environ

    获取系统环境变量,应用软件级别的变量

    #添加系统环境变量, 规定:key, value必须都为字符串类型
    os.environ['aaaaaaaaaa']='111'
    print(os.environ) #{字典类型}
    

    7、os.path

    1、返回文件路径中的目录(即文件所在的文件夹)

    print(os.path.dirname(r'/a/b/c/d.txt')) #/a/b/c
    

    2、返回文件路径中的文件名

    print(os.path.basename(r'/a/b/c/d.txt')) #d.txt
    

    3、判断文件是否存在

    前提:与执行文件是同一级别

    如果path 存在,返回 True,否则返回 False

    print(os.path.isfile(r'笔记.txt')) #False  没有这个文件
    print(os.path.isfile(r'os 模块.py')) #True 文件有
    print(os.path.isfile(r'day22')) #False day22为文件夹
    print(os.path.isfile(r'格式化输出.py')) #False  #不是同一目录下
    
    

    4、判断文件夹是否存在

    前提:与执行文件是同一级别

    如果文件存在,返回 True,否则返回 False

    print(os.path.isdir(r'aaa')) #False  #文件夹不存在
    print(os.path.isdir('day22')) #False #不是同一级别
    print(os.path.isdir('111')) #True
    

    5、os.path.join( )

    拼接路径

    print(os.path.join(r'/a/b', 'c.txt')) #/a/b/c.txt
    print(os.path.join('a','/','b','c','d')) #/b/c/d  #拼接路径,根目录(/)忽略
    

    6、os.dir.dirname(__ file __)

    获取执行文件的上一级目录

    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    print(BASE_DIR) #/Users/tophan/2020_python
    

    os.path.normpath(文件) :

    按..或/ 的数目返回上一级目录

    res = os.path.join(
        __file__,
        '..', ##.. 代表上一级
      	'..'   #.. 代表上一级
        )
    #规范化路径,如..和/
    print(res)  #/Users/tophan/2020_python/day22/os 模块.py/../..
    BASE_DIR=os.path.normpath(res) #按..或/ 的数目返回上一级目录
    print(BASE_DIR) #/Users/tophan/2020_python
    

    了解:

    在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
    >>> os.path.normcase('c:/windows\system32\')   
    'c:\windows\system32\'  
    

    7 os 用法具体案例

    #项目的根目录、路径相关的值都用'常量'
    BASE_PATH = os.path.dirname(DAY15_PATH)     
    print(BASE_PATH) #/Users/tophan/python练习
    
    # 路径的拼接:拼接文件'绝对路径'
    TEST_PATH = os.path.join(DAY15_PATH, '火影写真.txt')  
    print(TEST_PATH) #/Users/tophan/python练习/day15/老男孩教师写真.txt
    
    # 判断'文件/文件夹'是否存在:若文件存在返回True,若不存在返回False
    print(os.path.exists(TEST_PATH))# True
    print(os.path.exists(DAY15_PATH))  # True
    
    #判断'文件夹'是否存在
    print(os.path.isdir(TEST_PATH)) #这里是文件,所以False
    print(os.path.isdir(DAY15_PATH))#这里是文件夹,所以True
    
    #创建文件夹
    DIR_PATH = os.path.join(DAY15_PATH, '火影写真集') 
    os.mkdir(DIR_PATH) 
    
    #删除文件夹:只能删除'空的文件夹' 
    DIR_PATH = os.path.join(DAY15_PATH, '火影写真集') 
    os.rmdir(DIR_PATH) 
    
    #获取某个文件夹中所有文件的名字 
    DAY_PATH = '/Users/tophan/2020_python'
    list1 = os.listdir(DAY_PATH)
    print(list1) #拿到文件夹下所有文件或文件夹(只一层)
    res = enumerate(list1) # <enumerate object at 0x10de27b40>   enumerate(可迭代对象)---->得到一个对像,对象有一个个的元组(索引,元素) 
    print(list(res)) #得到列表套元组类型 [(0, 'day07'), (1, 'day09'), (2, 're.txt'), (3, 'day08'), (4, '火影写真集'), (5, '11.py'), (6, '深浅拷贝.py')...]
    
    #可以通过列表索引方式拿到元组,再通过元组索引拿到对应文件或文件夹名
    print(list(res)[1][1]) #day09
    

    8 os常用方法大全

    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.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    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的大小
    

    8、pathlib

    pathlib:在 python3.5之后推出的一个新的模块

    from pathlib import Path
    # print(Path(__file__)) #/Users/tophan/2020_python/day22/os 模块.py
    res = Path(__file__).parent.parent  #返回值是执行文件的上一级的上一级路径
    print(res) #/Users/tophan/2020_python
    

    Path('文件目录' / '文件名'):拼接文件路径

    res=Path('/a/b/c') / 'd/e.txt'  #拼接文件路径 
    print(res) #/a/b/c/d/e.txt
    

    path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径

    res=Path('/a/b/c') / 'd/e.txt'
    print(res.resolve()) #把一个路径或路的序列解析为一个绝对路径
    

    四 sys 模块

    1 sys 模块

    sys模块是与 python 解释器交互的模块

    import sys
    import os
    
    # 获取当前的Python解释器的环境变量路径
    print(sys.path)
    
    # 将当前项目路径添加到环境变量中
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_PATH)
    
    # 获取cmd终端的命令行  python3 py文件 用户名 密码
    print(sys.argv)  # 返回的是列表['']
    

    2 sys.argv

    sys.argvs :相当于一个程序从外部接收参数的桥梁;它可以看做一个列表,列表内是外部输入的参数。其第一个元素是执行程序本身,后面才是外部给予的参数

    应用场景:一般应用于使用终端执行 python 程序

    #当在终端中执行python 文件时,通过sys.argv #获取的是解释器后参数值 ['run.py', 'a.txt', 'b.txt'] 
    
    #通过sys.argv 可以获取的是解释器后参数值 ['run.py', 'a.txt', 'b.txt'] 
    print(sys.argv) # 通过打印操作,终端可以打印出['run.py', 'a.txt', 'b.txt'] 
    

    具体案例1:

    1、检索文件夹大小的程序,要求执行方式如下 :python3.8 run.py 文件夹

    '''
    c.txt
    hahaha
    hahaha
    hahaha
    '''
    
    '''sys.argv应用.py'''
    import sys
    import os
    
    res = sys.argv[1]
    if os.path.exists(res):
        size = os.path.getsize(res)
        print(f'文件大小为{size}') #文件大小为21
     
    
    '''run.py'''  #执行文件
    import os
    
    #os.system('终端命令'):python向操作系统发送请求, 让操作系统执行终端命令
    os.system('python3 /Users/tophan/2020_python/day22/sys.argv应用.py /Users/tophan/2020_python/day22/c.txt')
    
    

    具体案例2:

    通过 终端命令进行拷贝文本

    import sys
    
    #sys.argv:获取的是解释器后参数值
    print(sys.argv) # 有这步打印操作,终端中才会显示['run.py', 'a.txt', 'b.txt'] 
    src_file = sys.argv[1] #a.txt, 源文件路径
    dst_file = sys.argv[2] #b.txt, 目标文件路径
    
    with open('%s'%src_file, 'rb')as read_f,
        open('%s'%dst_file, 'wb')as write_f:
        for line in read_f:
            write_f.write(line)
    

    image-20200330213143610

    进度条案例

    具备知识:

    print('[%-50s]' %'#') #[#                                                 ]
    print('[%-50s]' %'##') #[##                                                ]
    print('[%-50s]' %'###') #[###                                               ]
    
    '''
    指定列表宽度:50
    - :右对齐
    '#':打印#,不够就用空格填充
    '''
    

    示例:

    res = ''
    import time
    for i in range(50):
        res += '#'
        time.sleep(0.3)
        print('
    [%-50s]%d'%(res, i+1), end='')  #
    :移至行首,即每次循环打印不会再在后面接着打印,都是会跳到行首打印,因此每次都会覆盖掉原来的打印内容,肉眼看起来像动态的进度
    
    结果展示:
    [############################################      ]44
    [##################################################]50
    

    进度条具体代码:

    import time
    def progress(percent):
        res_str = '#' * int(percent * 50)
        time.sleep(0.01)
        #
    :移至行首
        print('
    [%- 50s] %d%%' % (res_str, int(100 * percent)), end='')
    
    
    total_size = 333333
    recv_size = 0
    while recv_size < total_size:
        # 未接收字的节数
        remaining_size = total_size - recv_size
    
        if remaining_size >= 1024:
            # 每次接收的字节数
            recv_size += 1024
        # 获取接收的数据占总数据多少百分比
        else:
            recv_size += remaining_size
        percent = recv_size / total_size
        progress(percent)
    

    五 shutil 模块

    高级的 文件、文件夹、压缩包 处理模块

    1 shutil.copyfileobj(fsrc, fdst, length)

    将文件内容拷贝到另一个文件中

    import shutil
     
    shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) 
    

    2 shutil.copyfile(src, dst)

    拷贝文件

    shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在 
    

    3 shutil.copymode(src, dst)

    仅拷贝权限。内容、组、用户均不变

    shutil.copymode('f1.log', 'f2.log') #目标文件必须存在
    

    4 shutil.copystat(src, dst)

    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

    shutil.copystat('f1.log', 'f2.log') #目标文件必须存在
    
    

    5 shutil.copy(src, dst)

    拷贝文件和权限

    import shutil
    
    shutil.copy('f1.log', 'f2.log')
    
    

    6 shutil.copy2(src, dst)

    拷贝文件和状态信息

    import shutil
    
    shutil.copy2('f1.log', 'f2.log')
    
    

    7 shutil.ignore_patterns(*patterns)

    shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归的去拷贝文件夹

    import shutil
    
    shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除  
    
    

    8 shutil.rmtree(path[, ignore_errors[, onerror]])

    递归的去删除文件

    import shutil 
    shutil.rmtree('folder1')
    
    

    9 shutil.move(src, dst)

    递归的去移动文件,它类似mv命令,其实就是重命名。

    import shutil
    
    shutil.move('folder1', 'folder3')
    
    

    10 shutil.make_archive(base_name, format,...)

    创建压缩包并返回文件路径,例如:zip、tar

    创建压缩包并返回文件路径,例如:zip、tar

    • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
      如 data_bak =>保存至当前路径
      如:/tmp/data_bak =>保存至/tmp/
    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要压缩的文件夹路径(默认当前目录)
    • owner: 用户,默认当前用户
    • group: 组,默认当前组
    • logger: 用于记录日志,通常是logging.Logger对象
    #将 /data 下的文件打包放置当前程序目录
    import shutil
    ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
    
    #将 /data下的文件打包放置 /tmp/目录
    import shutil
    ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 
    
    

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

    import zipfile
    
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall(path='.')
    z.close()
    
    #zipfile压缩解压缩
    
    
    import tarfile
    
    # 压缩
    >>> t=tarfile.open('/tmp/egon.tar','w')
    >>> t.add('/test1/a.py',arcname='a.bak')
    >>> t.add('/test1/b.py',arcname='b.bak')
    >>> t.close()
    
    
    # 解压
    >>> t=tarfile.open('/tmp/egon.tar','r')
    >>> t.extractall('/egon')
    >>> t.close()
    
    tarfile压缩解压缩
    
    
  • 相关阅读:
    Database
    模式匹配
    About Unicode
    Dive into python学习笔记
    Python基本概念及零碎知识点
    Djnago的一些零碎知识点
    python项目练习3:万能的XML
    Django的第一个web程序及深入学习
    Poj1195&tyvj1474二维线段树
    zoj2319Beautiful People Dp
  • 原文地址:https://www.cnblogs.com/xy-han/p/12602228.html
Copyright © 2011-2022 走看看