【python測試開發棧】—幫你總結Python os模組高頻使用的方
Python中的os模組是主要和系統操作相關的模組,在平時的工作中會經常用到,花時間整理了os模組的高頻使用方法,同時整理出使用時需要注意的點。歸納來講,os模組的方法可以分為:目錄操作、檔案操作、路徑操作、系統操作等四大類,我們接下來依次進行介紹。
目錄操作相關
建立、刪除、重新命名目錄
# 當前目錄下建立目錄,注意第二個引數mode,在Windows被忽略
os.mkdir("test_folder")
# 刪除目錄,如果目錄不為空,則丟擲OSError:[Errno 66] Directory not empty
os.rmdir("test_folder")
# 遍歷建立目錄,可以建立多個目錄,其中exist_ok為False,表示目錄存在丟擲異常。
os.makedirs("a/b/c", exist_ok=False)
# 遍歷刪除目錄,可以直接,注意如果目錄不為空,會丟擲OSError:[Errno 66] Directory not empty
os.removedirs("a/b/c")
# 對檔案或者目錄進行重新命名,不能對路徑做變更
os.rename("a", "b")
# os.rename的升級版本,可以重新命名檔案,也可以重新命名檔案的上級目錄。
os.renames("b", "a/b")
遍歷目錄
# 對目錄a下的檔案進行遍歷,返回目錄下的名字列表,注意不會遍歷子目錄
file_name_list = os.listdir("a")
print(file_name_list)
'''
功能:會遞迴遍歷對目錄a下的檔案和目錄
引數:topdown表示遍歷目錄的優先順序(True先遍歷根目錄,False先遍歷子目錄)
onerror 當walk遇到錯誤時會呼叫
返回值:
parent 指的是父目錄,
dir_name返回parent目錄下所有的目錄
file_name返回parent目錄下所有的檔案
'''
list_result = os.walk("a", topdown=True, onerror=None, followlinks=False)
for parent, dir_name, file_name in list_result:
print(parent)
print(dir_name)
print(file_name)
print("============")
# 和listdir類似,都是對第一層目錄遍歷,區別在於scandir返回的是迭代器
with os.scandir("a") as it:
print("*"*12)
for entry in it:
print(entry.name)
需要注意的是,如果要遍歷的目錄下檔案數量比較多,比如數百萬個檔案,那麼就可以使用os.scandir(),因為如果這時使用listdir()會造成記憶體緊張。
獲取目錄
# 獲取當前工作目錄所在的絕對路徑
print(os.getcwd())
# 返回.. 表示當前目錄的上級目錄
print(os.pardir)
# 返回上級目錄,這裡用到了os.path.abspath,獲取絕對路徑
print(os.path.abspath(os.path.dirname(os.getcwd())))
# 用於改變當前工作目錄
os.chdir("a")
print(os.getcwd())
判斷目錄
# 判斷路徑a是否存在
print(os.path.exists("a"))
# 判斷路徑a是否是目錄
print(os.path.isdir("a"))
# 判斷路徑a是否是檔案
print(os.path.isfile("a"))
檔案屬性
'''
功能:返回檔案/目錄對應的屬性
返回值:st_mode(許可權模式)=16877, st_ino(inode節點號)=12897368202,
st_dev(inode所在裝置號)=16777220, st_nlink(inode連結數)=5, st_uid(檔案所有者id)=501,
st_gid(檔案所有者的組id)=20, st_size(檔案大小)=160, st_atime(上次訪問的時間)=1577449111,
st_mtime(最後一次修改的事件)=1577449111, st_ctime(建立時間)=1577449111)
'''
print(os.stat("."))
# 同樣,os也提供了單獨獲取某個屬性的方法
print(os.path.getatime("."))
print(os.path.getctime("."))
print(os.path.getmtime("."))
print(os.path.getsize("."))
# 修改檔案的訪問時間和修改時間
os.utime(".", (1577449111, 1577449111))
在上面註釋中提到的inode,主要用來儲存檔案的"元資訊",比如檔案的建立時間、檔案的大小等,中文名叫作"索引節點"。
讀寫檔案
# Python的os提供了open和write方法來讀寫檔案
# 開啟檔案
fd = os.open("test3.txt", os.O_RDWR | os.O_CREAT)
# 這裡返回的是一個檔案描述符
print(fd)
# 寫入字串
os.write(fd, b"This is test")
# 將字串重新整理到硬碟上
os.sync()
# 關閉檔案
os.close(fd)
# 作為對比,Python提供了open方法可以更方便的操作檔案,所以我們一般直接使用open方法。
with open("a/test3.txt", "wb") as f:
# 這裡返回的是一個操作檔案的BufferedWriter物件
print(f)
f.write(b"aaaaaaaaa")
路徑操作
# 獲取路徑的相對路徑
print(os.path.abspath("."))
# 判斷路徑是否是相對路徑
print(os.path.isabs("."))
# 將路徑拼接在一起
print(os.path.join(os.getcwd(), "a","b"))
# 將傳入的路徑的最後一級目錄/檔案拆分開,比如:傳入a/b/c/d 返回: a/b/c , d
print(os.path.split(os.getcwd()))
# 返回傳入路徑所在的目錄,比如:傳入a/b/c/d 返回:/a/b/c
print(os.path.dirname(os.getcwd()))
# 將傳入path分割為路徑和擴充套件,比如:傳入a/b/c/d.txt 返回('a.b/c/d', '.text')
print(os.path.splitext(os.path.abspath("./a/test3.txt")))
執行系統命令
# 注意這裡執行的命令一定是在執行的作業系統存在的命令,比如在linux系統用ls,在windows系統用dir
# 在當前程式中開啟一個子shell(子程式)來執行命令
# 返回值:命令的執行狀態 0 執行成功、非0,表示執行不成功。 會將命令的執行結果寫入到stdout中,也就是控制檯。
print(os.system("la"))
print("================")
'''
引數:cmd:要執行的命令。
mode:開啟檔案的模式,預設為'r',用法與open()相同。
buffering:0意味著無緩衝;1意味著行緩衝;其它正值表示使用引數大小的緩衝。
負的bufsize意味著使用系統的預設值,一般來說,對於tty裝置,它是行緩衝;對於其它檔案,它是全緩衝。
返回:這個方法會返回一個管道,返回一個連線管道的檔案物件,比如為f,可以透過f.readlines()和f.read()來讀取返回值。
'''
with os.popen("ls", "r", 1) as p:
print(type(p))
r = p.read()
print(r)
print("end")
不過Python提供了更強大的subprocess模組,使用subprocess.popen()方法會更加靈活。我們後面會專門寫文章來介紹subprocess這個模組的各種方法的使用。
系統操作
# 返回當前程式的id
print(os.getpid())
# 返回作業系統的資訊
print(os.uname())
# 返回系統的環境變數
print(os.environ)
# 返回系統的環境變數,PATH對應的值
print(os.environ.get('PATH'))
總結
上面總結了python3中os模組常用的方法,主要圍繞對路徑、目錄及系統命令的操作,大家在平時使用過程中可以靈活使用上面的各種方法,有時候需要多個方法搭配使用。我給大家留兩個練習題,這是我之前寫python指令碼碰到的問題:
- 獲取某個目錄下面最新的檔案
- 將所有以error.log結尾的檔案,全部放到某個對應目錄下。
大家可以思考下,然後在評論區寫下你的答案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2824641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【python測試開發棧】幫你總結python random模組高頻使Pythonrandom
- python os模組功能和方法總結Python
- 測試開發全棧之 Python 自動化全棧Python
- 【python基礎】os模組的使用Python
- python的os模組Python
- python os模組Python
- Python OS 模組Python
- python_OS 模組Python
- Python中os模組Python
- Python 內建模組:os模組Python
- python logging模組使用總結Python
- Python os.path() 模組Python
- Python os模組詳解Python
- [Python]OS模組應用Python
- 《Python測試開發技術棧—巴哥職場進化記》—前言Python
- 《Python 測試開發技術棧—巴哥職場進化記》—前言Python
- python測試開發面試題Python面試題
- Python語言高頻重點彙總Python
- Python全棧開發武沛齊day07模組Python全棧
- Python全棧開發武沛齊day06模組Python全棧
- 【python】os模組 的用法簡介Python
- python 使用 random模組生成隨機測試資料Pythonrandom隨機
- python–模組之os操作檔案模組Python
- python模組之os.pathPython
- Python之OS模組詳解Python
- Python::OS 模組 -- 程式引數Python
- Python OS模組操作檔案Python
- Python中os.walk()模組Python
- Python_服務端效能高併發測試Python服務端
- python自動化測試(一)--uiautomator總結PythonUI
- python後端開發面試總結Python後端面試
- python django專案開發總結PythonDjango
- Python高頻面試題解析公開課Python面試題
- Python的常見模組:OS和 time模組介紹Python
- #PYTHON# os以及os.path模組介紹Python
- 使用 Python 的 Tkinter模組 開發 IRC 客戶端Python客戶端
- 軟體測試是走Python棧還是Java棧好?PythonJava
- Python時間模組常用操作總結Python