• python自动化测试学习笔记-4常用模块


    常用模块

    1、os 

    2、sys 

    3、random 

    4、string 

    5、time 

    6、hashlib

    一、os模块

    os模块主要用来操作文件、目录,与操作系统无关。要使用os模块首先要导入OS模块,用命令import os 即可。

    目录和文件操作

    1、os.getcwd()--用来获取当前工作目录

    3、os.chdir(),改变当前脚本工作目录,相当于shell下的CD

    print(os.getcwd())#取当前工作目录 *************
    os.chdir("E:\besttest\python\")#更改当前目录
    print(os.getcwd())

     查看执行结果:

    E:esttestpythonesttest_code练习day5笔记
    E:esttestpython

    4、os.curdir()属性值为当前文件所在目录,当前目录相对路径

    5、os.pardir()当前目录的父目录字符串名:(‘..’)父目录相对路径

    print(os.curdir)#当前目录,相对路径’
    print(os.pardir)#父目录,相对路径

    6、os.mkdir()创建文件夹,生成单级目录

    print(os.mkdir("test"))#创建文件夹
    print(os.mkdir("c:\test"))#创建文件夹指定目录创建文件夹

    7、os.remdir()删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

    print(os.rmdir("test"))#删除文件夹

    8、os.remove()删除指定文件,不能删除文件夹

    print(os.remove("test.txt"))#只能删除文件,不能删除文件夹
    print(os.remove("C:\test\dasd.vsdx"))#指定文件路径的文件

    9、os.listdir():列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

    print(os.listdir('.'))#列出目录下的所有文件“.”代表当前目录
    print(os.listdir("c:\"))#可以列出指定目录的所有文件

    10、os.rename(): 格式:os.rename(“oldname”,”newname”) 重命名文件/目录

    os.rename("test","test1")#重命名文件
    os.rename("c:\test\sd","c:\test\rename")#重命名文件夹

    11、os.stat() 获取文件、文件夹(目录)的信息

    print(os.stat("test1"))#获取文件夹信息
    print(os.stat("全局变量.py"))#获取文件信息

    执行:os.stat_result(st_mode=16895, st_ino=10414574138339362, st_dev=100732189, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1516072926, st_mtime=1516072926, st_ctime=1516072926)
    os.stat_result(st_mode=33206, st_ino=3659174697285543, st_dev=100732189, st_nlink=1, st_uid=0, st_gid=0, st_size=778, st_atime=1516012249, st_mtime=1516012249, st_ctime=1515997654)

    12、_file_ file是这个文件夹的绝对路径

    print(__file__)#file就是这个文件的绝对路径

    系统属性和操作相关

    1、os.name()字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。

    print(os.name)#当前系统名称

    2、os.seq()输出操作系统特定的路径分隔符,win下为””,Linux下为”/”

     print(os.sep)#当前系统路径的分隔符

    3、os.linesep: 输出当前平台使用的行终止符,win下为” ”,Linux下为” ”

    print(os.linesep)#当前系统的换行符win'
    ' linux '
    '

    4、os.pathsep: 输出用于分割文件路径的字符串

    print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,win 是;  linux shi :

    5、os.environ: 系统环境变量

    print(os.environ)#当前系统的环境变量

    6、os.system(): 格式:os.system(“command”) ,运行命令,直接显示

    os.system('calc')#用来执行操作系统的命令直接打开计算器

       os.system('cmd')#用来执行操作系统的命令

    7、os.popen(),执行操作系统命令,并返回结果

    
    
    res=os.popen('ipconfig')#执行操作系统
    print(res.read())#能够执行操作系统命令,并返回结果,用read查看
    执行结果:
    Windows IP 配置


    无线局域网适配器 无线网络连接 2:

       媒体状态  . . . . . . . . . . . . : 媒体已断开
       连接特定的 DNS 后缀 . . . . . . . :

    无线局域网适配器 无线网络连接:

       媒体状态  . . . . . . . . . . . . : 媒体已断开
       连接特定的 DNS 后缀 . . . . . . . : AirDream

    以太网适配器 本地连接:

       连接特定的 DNS 后缀 . . . . . . . : AirDream
       本地链接 IPv6 地址. . . . . . . . : fe80::582c:b8ae:16b9:dd70%13
       IPv4 地址 . . . . . . . . . . . . : 192.168.56.55
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       默认网关. . . . . . . . . . . . . : 192.168.56.1
    。。。。

    文件路径相关

    1、os.path.abspath(): 格式:os.path.abspath(path) ,返回path规范化的绝对路径

    print(os.path.abspath(__file__))#获取绝对路径
    print(os.path.abspath("."))
    print(os.path.abspath(".."))

    查看结果:

    E:esttestpythonesttest_code练习day5笔记常用模块.py
    E:esttestpythonesttest_code练习day5笔记
    E:esttestpythonesttest_code练习

    2、os.path.split(): 格式:os.path.split(path) 、将path分割成目录和文件名二元组返回

    print(os.path.split("c:\usr\hehe\hehe.txt"))#分割路径和文件名

    查看执行结果:

    ('c:\usr\hehe', 'hehe.txt')

    3、os.path.dirname(): 格式:os.path.dirname(path) ,返回path的目录。其实就是os.path.split(path)的第一个元素

    print(os.path.dirname("\usr\local"))#获取父目录#***********

    查看执行结果:usr

    4、os.path.basename(): 格式:os.path.basename(path) ,返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素

    print(os.path.basename("E:\besttest\python"))#获取最后一个

    查看执行结果:python

    5、os.path.exists(): 格式:os.path.exists(path) ,如果path存在,返回True;如果path不存在,返回False

    print(os.path.exists("E:\besttest\python"))#目录文件是否存在
    print(os.path.exists("c:\besttest\python"))#目录文件是否存在

    查看执行结果:True    False

    6、os.path.isabs(): 格式:os.path.isabs(path) ,如果path是绝对路径,返回True

    print(os.path.exists("..\day4笔记"))#路径是否存在
    print(os.path.isabs("..\day4笔记"))#绝对路径是否存在

    运行结果:

    True
    False

    7、os.path.isfile(): 格式:os.path.isfile(path) ,如果path是一个存在的文件,返回True。否则返回False

    print(os.path.isfile("E:\besttest\python\userinfo.txt"))#判断是否是一个文件
    print(os.path.isfile("E:\besttest\python"))

    查看执行结果:

    True
    False

    8、os.path.isdir(): 格式:os.path.isdir(path) ,如果path是一个存在的目录,则返回True。否则返回False

    print(os.path.isdir("E:\besttest\python"))

    9、os.path.getatime(): 格式:os.path.getatime(path) ,返回path所指向的文件或者目录的最后存取时间

    print(os.path.getatime("E:\besttest\python"))

    执行结果:1514864986.2809415

    10、os.path.getmtime(): 格式:os.path.getmtime(path) ,返回path所指向的文件或者目录的最后修改时间

    print(os.path.getmtime("e:\"))

    1516072216.474383

    11、os.path.join(): 
    格式:os.path.join(*parentpath,filename) 
    将目录和文件名组合成路径(可以将目录拆分成多个,例如D:aabc目录,可以拆分成D:a和abc)

    print(os.path.join("e:\","root","hehe","a.sql"))#拼接成一个路径*

    查看执行结果:e: oothehea.sql

    二、sys模块

    sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互.

    要应用sys模块,同样需要先导入模块:import sys

    dir(sys)可以查看sys所有可用的方法:

    1、dir(sys)

    import sys
    print(dir(sys))

    查看执行结果:

    ['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']
    2、sys.path  python环境变量的值

    print(sys.path)#环境变量

    查看执行结果:

    ['E:\besttest\python\besttest_code\练习\day5笔记', 'E:\besttest\python\besttest_code', 'C:\Miniconda3\python35.zip', 'C:\Miniconda3\DLLs', 'C:\Miniconda3\lib', 'C:\Miniconda3', 'C:\Miniconda3\lib\site-packages', 'C:\Miniconda3\lib\site-packages\setuptools-23.0.0-py3.5.egg']

    3、sys.platform 返回操作系统平台名称

    print(sys.platform)

    执行结果:win32
    4、sys.version 查看python解释程序的版本信息

    print(sys.version)#查看python 版本

    查看执行结果:

    3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]

    5、sys.exit  退出程序,正常退出时exit(0)

    print('ssssss')
    sys.exit()
    print('继续')

    查看执行结果:ssssss  可以看到,结果只打印了第一行,没有打印第三行。

    6、sys.argv 命令行参数,第一个元素是程序本身路径

    print(sys.argv)#获取运行python文件的时候参数

    运行查看结果:

    ['E:/besttest/python/besttest_code/练习/day5笔记/常用模块.py']

    可以看到,上述运行结果是一个list ,什么都不传的场合,list中默认的元素是当前程序的路径。

    下面写一个小程序:

    在命令行中,执行python文件,给出文件路径,就能清楚路径下的日志内容。

    
    
    import os
    import sys
    def clean_log(path):#定义一个清理日志的函数,此处只是虚拟的,需要传入一个路径
    print('日志已经清理')

    args=sys.argv#获取命令行参数
    if len(args)>1:#判断命令行参数list长度是否大于1
    if os.path.isdir(args[1]):#大于1的场合,说明传了一个参数进来,然后判断参数是否为有效的路径
    clean_log(args[1])#如果是一个有效的路径,则调用clean_log函数
    else:
    print('地址不正确')
    else:#如果长度小于等于1,则说明命令行没有传入其他参数,给出提示
    print('需要输入一个路径')
     

    需要几个参数就在命令行输入几个参数就可以,argv传参不能直接运行python文件,需要在命令行运行,输入参数。

    三、random模块

    要使用random模块,同样需要导入:import random

    1、random.random
    random.random()用于生成一个0到1的随机浮点数: 0 <= n < 1.0

    print(random.random())

    查看执行结果:0.013748057102894395

    2、random.randint
    random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

    print(random.randint(1,199))

    查看执行结果:18

    3、random.uniform
    random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: b <= n <= a。如果 a <b, 则 a <= n <= b

    print(random.uniform(250,20))
    print(random.uniform(10,20))

    查看执行结果:

    154.15652457751816
    12.795665102733665

    6、random.choice
    random.choice从序列中获取一个随机元素。函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。

    print(random.choice('1234567890'))
    print(random.choice(['a','b','c','d','e','f','g']))
    print(random.choice((11,21,31,41,51,61,71,81,91)))

    查看执行结果:

    1
    d
    11

    7、random.sample
    random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列;

    print(random.sample((11,21,31,41,51,61,71,81,91),4))

    查看执行结果:

    [21, 61, 81, 11]

    8、random.shuffle
    random.shuffle(x[, random]),用于将一个列表中的元素打乱,改变原有列表。

    s=random.sample((11,21,31,41,51,61,71,81,91),4)
    print(s)
    random.shuffle(s)#洗牌,打乱顺序,只能传list,会改变原列表
    print(s)

    查看执行结果:

    [31, 41, 61, 51]
    [41, 51, 31, 61]

    四、string模块

    使用string模块也需要导入,import string ,主要用来处理一些字符串。

    首先查看string都有哪些方法:

    print(dir(string))

    ['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

    print(string.digits)#0-9的字符串
    print(string.ascii_letters)#大写加小写
    print(string.ascii_lowercase)#所有的小写字符
    print(string.ascii_uppercase)#所有大写字符
    print(string.punctuation)#所有的特殊字符
    print(string.capwords('sss'))#首字母大写
    print(string.hexdigits)
    print(string.printable)#所有字符
     

    查看执行结果:

    0123456789
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    !"#$%&'()*+,-./:;<=>?@[]^_`{|}~

    Sss
    0123456789abcdefABCDEF
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[]^_`{|}~    

    五、time模块

     time模块提供各种操作时间的函数,使用time模块,首先需要导入:import time

    在Python中,通常有这几种方式表示时间:时间戳、格式化的时间字符串、元组(struct_time 共九种元素)

    1、时间戳:只从计算机Unix元年1970年1月1号 00:00:00开始到现在按秒计算的偏移量。

    2、格式化的时间字符串:世界标准时间,中国为UTC+8

    3、时间元祖:中间过程,可以把时间戳和格式化时间进行相互转换,struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。

    time.time

    查看当前时间的时间戳

    print(time.time())

    查看执行结果:返回值类型,可以看出是float类型,如果需要int类型,可以进行类型强制转化,int()

    1516103056.6053376

    print(int(time.time()))#当前的时间戳

    查看执行结果:

    1516103746

    time.localtime()

    将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间,不填参数,默认是当前时间。

    print(time.localtime())

    查看执行结果:

    time.struct_time(tm_year=2018, tm_mon=1, tm_mday=16, tm_hour=19, tm_min=52, tm_sec=28, tm_wday=1, tm_yday=16, tm_isdst=0)
    tm_year :年

    tm_mon :月(1-12)

    tm_mday :日(1-31)

    tm_hour :时(0-23)

    tm_min :分(0-59)

    tm_sec :秒(0-59)

    tm_wday :星期几(0-6,0表示周日)

    tm_yday :一年中的第几天(1-366)

    tm_isdst :是否是夏令时(默认为-1)

    也可以指定参数,我们用上面获取的时间戳

    print(time.localtime(1516103746))

    time.struct_time(tm_year=2018, tm_mon=1, tm_mday=16, tm_hour=19, tm_min=55, tm_sec=46, tm_wday=1, tm_yday=16, tm_isdst=0)

    time.gmtime()

    time.gmtime() 函数将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1 00:00:00以来的秒数。

    print(time.gmtime())#默认取标准时区的时间元祖
    print(time.gmtime(1516103746))#如果传入了一个时间戳,那么就把这个时间戳转化成时间元祖

    查看执行结果:

    time.struct_time(tm_year=2018, tm_mon=1, tm_mday=16, tm_hour=11, tm_min=58, tm_sec=28, tm_wday=1, tm_yday=16, tm_isdst=0)
    time.struct_time(tm_year=2018, tm_mon=1, tm_mday=16, tm_hour=11, tm_min=55, tm_sec=46, tm_wday=1, tm_yday=16, tm_isdst=0)

    time.mktime()

    将一个struct_time转化为时间戳

    print(time.mktime(time.localtime()))#需要传入一个时间元组
    #print(time.mktime())#不传会报错

    查看执行结果:

    1516104153.0

    time.sleep()

    线程睡眠指定时间,单位为妙

    time.sleep(5)
    print('www')

    会在启动程序5秒后,执行后边的代码。

    time.strftime( format [, t] )

    返回字符串表示的当地时间。 
    把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。

    print(time.strftime("%Y%m%d %H:%M:%S",time.localtime()))
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime(1516103746)))

    查看执行结果:

    20180116 20:16:29
    2018-01-16 11:55:46

    cur_time=time.strftime('%Y-%m-%d %H:%M:%S')#当前时间的格式化时间
    cur_time1=time.strftime('%Y%m%d')
    print(cur_time)
    print(cur_time1)

    查看执行结果:不传参数的时候,默认当前格式化时间,可以单独获取某一个格式化的参数

    2018-01-16 20:17:30
    20180116

    time.strptime(string[,format]) 
    将格式字符串转化成struct_time. 
    该函数是time.strftime()函数的逆操作。time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。所以函数返回的是struct_time对象。

    stime="2018-1-1 20:20:00"#定义一个格式化时间
    str_time=time.strptime(stime,"%Y-%m-%d %H:%M:%S")#将格式化时间转化成时间元组
    print(str_time)
    sc_time=time.mktime(str_time)#将时间元组转化成时间戳
    print(sc_time)

    查看执行结果:

    time.struct_time(tm_year=2018, tm_mon=1, tm_mday=1, tm_hour=20, tm_min=20, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
    1514809200.0

    ###########################################

    我们可以根据上边的知识,写两个时间戳与格式化时间相互转化的函数,方便以后调用。

    def timestampToStr(timestamp):
    strc_time=time.gmtime(timestamp)
    strf=time.strftime("%Y-%m-%d %H:%M:%S",strc_time)
    return strf

    def strfTotimestamp(stime,format='%Y-%m-%d %H:%M:%S'):
    strc_time=time.strptime(stime,format)
    timestamp=time.mktime(strc_time)
    return timestamp




    res=timestampToStr(1515925099)
    print(res)
    tim=strfTotimestamp("2018-2-22 12:11:22")
    print(tim)

    查看执行结果:

    2018-01-14 10:18:19
    1519272682.0

    六、hashlib模块

    hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512.

    要使用hashlib要先导入该模块:import hashlib

    1.创建一个哈希对象,使用哈希算法命名的构造函数或通用构造函数hashlib.new(name[, data])

    2.使用哈希对象调用update()方法填充这个对象

    3.调用digest() 或 hexdigest()方法来获取摘要(加密结果)

    哈希对象常用的方法

      h = hashlib.md5()  或  h = hashlib.new("md5")        # md5可以替换为其他的哈希类型

      h.update(arg)

        将字节对象arg填充到哈希对象中,arg通常为要加密的字符串

      h.digest()

        返回加密结果,它是一个字节对象,长度为 h.digest_size,包含的字节范围 0 ~ 255

      h.hexdigest()

        返回加密结果,它是一个字符串对象,长度为 h.digest_size * 2,只包含16进制数字

    h=hashlib.md5(b"33333")#定义一个哈希函数,只能传入字节对象,不能传入字符串
    print(h.hexdigest())#返回的是一个字节对象,用hexidigest 返回一个字符串

    查看执行结果:

    b7bc2a2f5bb6d521e64c8974c143e9a0

    通常要把字符串转化成字节,可以用encode方法例如:

    st="1234567890"
    h=hashlib.md5(st.encode())
    print(h.hexdigest())

    查看执行结果:

    e807f1fcf82d132f9bb018ca6738a19f

    ############################

    现在我们来写一个小程序,用来对字符串加密

    import  hashlib
    def md5_pwd(st:str):#规定传参的类型必须是str类型
    bytes_st=st.encode()
    h=hashlib.md5(bytes_st)
    pwd=h.hexdigest()
    return pwd


    st="peiyingfei"
    res=md5_pwd(st)
    print(res)

    查看执行结果:5429caaedc494ebfd6f3d988ab6a1d66

    #md5加密是不可逆的,不能被解密
    #一些解密的网站,其实是撞库,与库里边的保存的md5值相等了

    其他的一些加密算法应用于MD5类似

    
    
    #sha256加密
    import hashlib
    st='asdasdasd'
    bytes_st=st.encode()
    sha_256=hashlib.sha256(bytes_st)
    print(sha_256.hexdigest())

    import base64
    r=base64.b64encode('23123123'.encode())#加密encode
    res=r.decode()
    print(res)#把bytes类型转化成字符串
    jiemi_res=base64.b64decode(res)
    print(jiemi_res.decode())

    好了,今天先到这里了~

     
  • 相关阅读:
    OC中extern,static,const的用法
    pod install 报错
    设置Image渲染模式使用TintColor
    VLC 用到的那些 YUV 格式
    base64编码原理
    scp 拷贝文件时报错
    linux 恢复误删文件
    hadoop 集群安装(Cloudera CDH方式)
    记录自己需要读的几本书
    求解最长回文子串
  • 原文地址:https://www.cnblogs.com/phoebes/p/8289944.html
Copyright © 2020-2023  润新知