• Python 常用模块


    常用模块:

    1.time和datetime模块;
    2.random模块;
    3.os、sys和shutil模块;
    4.json、pickle和shelve模块;
    5.xml和ymal处理;
    6.configparser和sbuprocess模块;
    7.hashlib模块;

    模块和包
    1.概念

    • 模块用来从逻辑上组织python代码(变量、函数、类,逻辑:实现某个功能),其本质就是以.py结尾的python文件。(例如:文件:test.py,对应的模块名:test);
    • 包:用来从逻辑上组织模块,其本质就是一个目录(必须带有一个__init__.py文件);

    2.导入方法

    • import module_name:本质是将module_name解释一遍,并将解释结果赋值给module_name;
    • from module_name import name:本质将module_name中的name变量放到当前程序中运行一边,所以调用的时候直接print(name)就可以打印出name变量的值,切记调用模块的时候只需要import模块名,不需要加.py;
    • import module_name1, module_name2,...:导入多个模块;
    • from module_name import name as nm:为导入模块取别名;
    • from module_name import *(不建议使用该方法);

    3.导入模块的本质就是把python文件解释一遍
    import module_name ---> module_name.py ---> module_name.py的路径--->sys.path;

    4.导入包的本质就是执行该包下面的__init__.py文件,所以如果想要调用包下面的python程序需要在包下的__init__.py导入需要的程序;

    1.time与datetime模块

    python中常见的时间表示方法:
    a.时间戳;
    b.格式化的时间字符串;
    c.struct_time(元组);
    time模块方法(来自于源代码):

    import time
    
    # 时间戳:返回从1970年1月1日00:00:00到现在为止的时间(单位为秒)
    time_time = time.time()
    print("time_time is %s" % time_time)
    
    # struct time:返回UTC时间的struct格式;如果没有传参,则转换当前时间
    gm_time = time.gmtime(time_time)
    print("gm_time is {}".format(gm_time))
    
    # struct time:返回本地时间的struct格式;如果没有传参,则转换当前时间
    local_time = time.localtime()
    print("local_time is {}".format(local_time))
    
    # 返回处理器时间,3.3开始废弃,改成time.process_time()测量处理器运算时间,不稳定,mac上测不出来
    clock_time = time.clock()
    print("clock_time is {}".format(clock_time))
    
    # 返回进程运行时间
    process_time = time.process_time()
    print("process_time is {}".format(process_time))
    
    # 延迟执行时间,单位为秒;该函数无返回值
    sleep_time = time.sleep(2)
    print("sleep time is {}".format(sleep_time))
    
    # 返回与UTC时间的时间差,以秒计算
    alt_zone = time.altzone
    print("alt_zone is {}".format(alt_zone))
    
    # 返回时间格式为:Fri May  4 14:54:43 2018;如果传参,则转换参数;否则转换当前时间;参数为时间元组
    asc_time = time.asctime()
    print("asc_time is {}".format(asc_time))
    
    # 返回时间格式为:Fri May  4 14:57:19 2018;如果传参,则转换参数;否则转换当前时间;参数为秒
    c_time = time.ctime()
    print("c_time is {}".format(c_time))
    
    # 返回时间戳:将struct时间对象转成时间戳
    mk_time = time.mktime(time.localtime())
    print("mk_time is {}".format(mk_time))
    
    # 返回字符串时间:将UTC struct_time格式转成指定的字符串格式时间
    strf_time = time.strftime("%d: %m: %Y %H: %M: %S", time.gmtime())
    print("strf_time is {}".format(strf_time))
    
    # 返回struct_time时间:将字符串时间转成struct_time格式时间
    strp_time = time.strptime("2018-05-04", "%Y-%m-%d")
    print("strp_time is {}".format(strp_time))
    

    相互之间的转换关系如下:

    格式化参数说明:

        %Y  Year with century as a decimal number.
        %m  Month as a decimal number [01,12].
        %d  Day of the month as a decimal number [01,31].
        %H  Hour (24-hour clock) as a decimal number [00,23].
        %M  Minute as a decimal number [00,59].
        %S  Second as a decimal number [00,61].
        %z  Time zone offset from UTC.
        %a  Locale's abbreviated weekday name.
        %A  Locale's full weekday name.
        %b  Locale's abbreviated month name.
        %B  Locale's full month name.
        %c  Locale's appropriate date and time representation.
        %I  Hour (12-hour clock) as a decimal number [01,12].
        %p  Locale's equivalent of either AM or PM.
        %% A literal "%" character.
    

    datetime模块介绍:
    1.datetime模块包含如下类:

    类名 功能说明
    date 日期对象,常用的属性有year,month,day
    time 时间对象
    datetime 日期时间对象,常用的属性有hour,minute,second,microsecond
    timedelta 时间间隔,即两个时间点之间的长度
    timezone 时区
    tzinfo 时区信息对象

    2.datetime模块中包含的常量

    常量 功能说明 用法 返回值
    MAXYEAR 返回能表示的最大年份 datetime.MAXYEAR 9999
    MINYEAR 返回能表示的最小年份 datetime.MINYEAR 1

    3.时间加减

    import datetime
     
    print(datetime.datetime.now())    # 返回 2016-08-19 12:47:03.941925
    print(datetime.date.fromtimestamp(time.time()) )     # 时间戳直接转成日期格式 2016-08-19
    print(datetime.datetime.now() )
    print(datetime.datetime.now() + datetime.timedelta(3))    # 当前时间+3天
    print(datetime.datetime.now() + datetime.timedelta(-3))    # 当前时间-3天
    print(datetime.datetime.now() + datetime.timedelta(hours=3))    # 当前时间+3小时
    print(datetime.datetime.now() + datetime.timedelta(minutes=30))    # 当前时间+30分
    
    c_time  = datetime.datetime.now()
    print(c_time.replace(minute=3,hour=2))    # 时间替换
    

    如下简图所示(注:途中有个小错误,时间元组是7个元组):

    2.random模块

    1.random模块的基本方法:

    import random
    
    print(random.random())                              # 随机生成[0, 1)之间的浮点数
    print(random.randint(1, 10))                        # 随机生成[a, b]范围的整数,包括端点
    print(random.randrange(0, 100, 2))                  # 随机生成[a, b)范围指定步长的数(2---偶数)
    
    # random.choice:从非空序列中随机选择一个元素
    print(random.choice("hello"))                       # 随机生成指定字符串中的元素
    print(random.choice([1, 3, 5, 2, 4, 6]))            # 随机生成指定列表中的元素
    print(random.choice(("abc", "123", "liu", 555)))    # 随机生成指定元组中的元素
    print(random.sample("hello", 3))                    # 随机生成指定序列的指定个数的元素
    print(random.uniform(1, 10))                        # 随机生成指定区间的浮点数
    
    # 洗牌功能
    items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    print("洗牌前:", items)
    random.shuffle(items)
    print("洗牌后:", items)
    

    运行输出结果为:

    0.4690573091913972
    3
    64
    l
    4
    123
    ['l', 'h', 'l']
    5.548564168880079
    洗牌前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    洗牌后: [8, 2, 9, 3, 6, 0, 4, 1, 7, 5]
    

    2.random模块方法实际应用:生成随机验证码
    (1)生成随机4位数字验证码

    # 生成随机4位数字验证码
    check_code = ""         # 最终生成的验证码
    for num in range(4):
        current = random.randint(0, 9)
        check_code += str(current)
    print(check_code)       # 运行输出结果为:7345
    

    (2)生成随机4位字符串验证码(数字+字符)

    # 生成随机4位字符串验证码(数字+字符)
    check_code = ""         # 最终生成的验证码
    for i in range(4):
        cur = random.randrange(0, 4)        # 随机猜的范围
        # 随机猜的范围与循环次数相等,取字母
        if cur == i:
            temp = chr(random.randint(65, 90))  # 随机取一个字母
        else:
            temp = random.randint(0, 9)
        check_code += str(temp)
    print(check_code)       # 运行输出结果为:K666
    

    3.os、sys和shutil模块

    1.os模块提供了非常丰富的方法来处理文件和目录,常用的方法如下所示::

    os.access(path, mode):检验权限模式
    os.chdir(path):改变当前工作目录
    os.chflags(path, flags):设置路径的标记为数字标记
    os.chmod(path, mode):更改权限
    os.chown(path, uid, gid):更改文件所有者
    os.chroot(path):改变当前进程的根目录
    os.close(fd):关闭文件描述符fd
    os.closerange(fd_low, fd_high):关闭所有文件描述符,从fd_low(包含)刀fd_high(不包含),错误会忽略
    os.dup(fd):复制文件描述符fd
    os.dup2(fd, fd2):将一个文件描述符fd复制到另一个fd2
    os.fchdir(fd):通过文件描述符改变当前工作目录
    os.fchmod(fd, mode):改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限
    os.fchown(fd, uid, gid):修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定
    os.fdatasync(fd):强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息
    os.fdopen(fd[, mode[, bufsize]]):通过文件描述符fd创建一个文件对象,并返回这个文件对象
    os.fpathconf(fd, name):返回一个打开的文件的系统配置信息
    os.fstat(fd):返回文件描述符fd的状态,像stat()
    os.fstatvfs(fd):返回包含文件描述符fd的文件的文件系统的信息,像statvfs()
    os.fsync(fd):强制将文件描述符为fd的文件写入硬盘
    os.ftruncate(fd, length):裁剪文件描述符为fd对应的文件,所以它最大不能超过文件大小
    os.getcwd():返回当前工作目录
    os.getcwdu():返回当前工作目录的Unicode对象
    os.isatty(fd):如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true,否则返回false
    os.lchflags(path, flags):设置路径的标记为数字标记,类似chflags(),但是没有软连接
    os.lchmod(path, mode):修改连接文件权限
    os.lchown(path, uid, gid):更改文件所有者,类似chown,但是不追踪链接
    os.link(src, dst):创建硬链接,名为参数dst,指向src
    os.listdir(path):返回path指定的文件夹包含的文件或文件夹的名称列表
    os.lseek(fd, pos, how):设置文件描述符fd当前位置pos,how修改方式:SEEK_SET或者0:从文件开始计算pos;SEEK_CUR或者1:从当前位置计算;SEEK_END或者2:从文件尾部开始;
    os.lstat(path):像stat(),但是没有软连接
    os.major(device):从原始的设备号中提取设备major号码(使用stat中的st_dev或者st_rdev field)
    os.makedev(major, minor):以major和minor设备号组成一个原始设备号
    os.makedirs(path[, mode]):递归文件夹创建函数,像mkdir(),但创建的所有intermediate-level文件夹需要包含子文件夹
    os.minor(device):从原始设备号中提取设备minor号码(使用stat中的st_dev或者st_rdev field)
    os.mkdir(path[, mode]):以数字mode的mode创建一个名为path的文件夹,默认的mode是0777(八进制)
    os.mkfifo(path[, mode]):创建命名管道,mode为数字默认为0666(八进制)
    os.mknod(filename[, mode=0600, device):创一个名为filename文件系统节点(文件,设备特别文件名或者命名pipe)
    os.open(file, falgs[, mode]):打开一个文件,并且设置需要打开的选项,mode参数是可选的
    os.openpty():打开一个新的伪终端对,返回pty和tty的文件描述符
    os.pathconf(paht, name):返回相关文件的系统配置信息
    os.pipe():创建一个管道,返回一对文件描述符(r, w)分别为读和写
    os.popen(command[, mode[, bufsize]]):从一个command打开一个管道
    os.read(fd, n):从文件描述符fd中读取最多n个字节,返回包含读取字节的字符串,文件描述符fd对应文件已到达结尾,返回空字符串
    os.readlink(path):返回软连接所指向的文件
    os.remove(path):删除路径为path的文件,如果是一个文件夹,将抛出OSError;查看下面的rmdir()删除一个directory
    os.removedirs(path):递归删除目录
    os.rename(src, dst):重命名文件或目录,从src到dst
    os.renames(old, new):递归地对目录进行更名,也可对文件进行更名
    os.rmdir(path):删除path指定的空目录,如果目录非空,则抛出OSErrot异常
    os.stat(path):获取path指定的路径信息,功能等同于C API中的stat()系统调用
    os.stat_float_times([newvalue]):决定stat_result是否以float对象显示时间戳
    os.statvfs(path):获取指定路径的文件系统统计信息
    os.symlink(src, dst):创建一个软连接
    os.tcgetpgrp(fd):返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
    os.tcsetpgrp(fd, pg):设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg
    os.tempnam([dir, [prefix]]):返回唯一的路径名用于创建临时文件
    os.tmpfile():返回一个打开的模式为(w+b)的文件对象,该文件对象没有文件夹入口,没有文件描述符,将会自动删除
    os.tmpnam():为创建一个临时文件返回一个唯一的路径
    os.ttyname(fd):返回一个字符串,它表示与文件描述符fd关联的终端设备,如果fd没有与终端设备关联,则引发一个异常
    os.unlink(path):删除文件路径
    os.utime(path, times):返回指定的path文件的访问和修改的时间
    os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]):输出在文件夹中的文件名通过在树中游走,向上或向下
    os.write(fd, str):写入字符串到文件描述符fd中,返回实际写入的字符串长度
    

    2.sys模块常用函数:

    sys模块常见函数:
    sys.argv:实现从程序外部向程序传递参数,第一个元素是程序本身路径
    sys.exit([arg]):程序中的推出,arg=0为正常退出
    sys.getdefaultencoding():获取系统当前编码,一般默认为ASCII
    sys.setdefaultencoding():设置系统默认编码,执行dir(sys)时不会看到这个方法,再解释器中执行不通过,
    可以先执行reload(sys),再执行setdefaultencoding("utf-8"),此时将系统默认编码设置为utf-8
    sys.getfilesystemencoding():获取文件系统使用编码方式
    sys.path:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到
    sys.platform:获取当前系统平台
    sys.version:获取python解释器版本信息
    sys.stdin,sys.stdout,sys.stderr:标准I/O流对应的对象
    

    3.shutil模块:
    shutil:高级的文件、文件夹、压缩包处理模块

    shutil.copyfileobj(fsrc, fdst[, length]):将文件内容拷贝到另一个文件中,copyfileobj方法只会拷贝文件内容
    shutil.copyfile(src, dst):拷贝文件,copyfile只拷贝文件内容
    shutil.copy(src, dst):拷贝文件和权限
    shutil.copy2(src, dst):拷贝文件和状态信息
    shutil.copymode(src, dst):仅拷贝权限,内容、组、用户均不变,前提是dst文件存在,否则产生异常
    shutil.copystat(src, dst):仅拷贝状态信息,即文件属性,包括:mode bits、atime、mtime、flags
    shutil.ignore_patterns(*patterns):忽略某个文件,有选择性的拷贝
    shutil.copytree(src, dst, symlinks=Flase, ignore=None):递归的去拷贝文件
    shutil.rmtree(path[, ignore_errors[, onerror]]):递归的删除文件
    shutil.move(src, dst):递归的移动文件,类似mv命令,其实就是重命名
    
    shutil.make_archive(base_name, format, ...):
    创建压缩包并返回文件路径,例如:zip、tar
    base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径
    如:www=>保存至当前路径 如:/Users/alex/www => 保存至/Users/alex
    format:压缩包种类,"zip","tar","bztar","gztar"
    root_dir:要压缩的文件夹路径(默认当前目录)
    owner:用户,默认当前用户
    group:组,默认当前组
    logger:用于记录日志,通常时logging.Logger对象
    
    import shutil
    # 将 C:Downloads	est 下的文件打包放置当前程序目录
    res1 = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='C:\Downloads\test')
    
    # 将 C:Downloads	est 下的文件打包放置 Usersmydir目录(当前目录)
    res2 = shutil.make_archive("/Users/mydir/wwwwwwwwww", 'gztar', root_dir='C:\Downloads\test')
    

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

    import zipfile
    
    # 压缩
    z_file = zipfile.ZipFile("test.zip", "w")
    z_file = write("a.log")
    z_file = write("data.date")
    z_file.close()
    
    # 解压
    z_unfile = zipfile.ZipFile("test.zip", "r")
    z_unfile.extractall()
    z_unfile.close()
    
    import tarfile
    
    # 压缩
    tar_in = tarfile.open("my.tar", "w")
    tar_in.add("C:\Users\bbs.log", arcname="bbs.log")
    tar_in.add("C:\Users\cmdb.log", arcname="cmdb.log")
    tar_in.close()
    
    # 解压
    tar_out = tarfile.open("my.tar", "r")
    tar_out.extractall()            #可设置解压地址
    tar_out.close()
    

    4.json、pickle和shelve模块

  • 相关阅读:
    学了axure的感受
    axure的功能
    PS的应用
    day15-1 模块
    day14-2 模块详解
    day14-1 模块定义,导入
    day13-1 Json & pickle 数据序列化
    day12-3 内置方法
    day12-2 内置方法
    day12-1 迭代器和生成器
  • 原文地址:https://www.cnblogs.com/love9527/p/8983820.html
Copyright © 2020-2023  润新知