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:\besttest\python\besttest_code\練習\day5筆記
E:\besttest\python

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下為”\t\n”,Linux下為”\n”

print(os.linesep)#當前系統的換行符win'\n' linux '\r\n'

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:\besttest\python\besttest_code\練習\day5筆記\常用模塊.py
E:\besttest\python\besttest_code\練習\day5筆記
E:\besttest\python\besttest_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:\a\abc目錄,可以拆分成D:\a和abc)

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

查看執行結果:e:\root\hehe\a.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())

好了,今天先到這里了~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM