Python標(biāo)準(zhǔn)庫之os模塊詳解
OS標(biāo)準(zhǔn)庫是操作系統(tǒng)接口模塊,提供了操作系統(tǒng)相關(guān)功能的調(diào)用函數(shù)。
使用OS標(biāo)準(zhǔn)庫前,需要導(dǎo)入模塊 import os
1、文件目錄操作
os.stat() 獲取文件狀態(tài)
獲取文件或文件描述符的狀態(tài),返回一個 stat_result 對象。
- stat_result對象有很多可以調(diào)用的屬性:
- st_atime:最近訪問時間,單位秒
- st_mtime:最近修改時間,單位秒
- st_ctime:文件創(chuàng)建時間(Windows),修改時間(unix),單位秒
- st_size:文件大小,單位字節(jié)
- st_uid:文件所有者的ID
- st_nlink:硬鏈接數(shù)量
- st_dev:文件所在設(shè)備的標(biāo)識符
- st_ino:文件的唯一標(biāo)識(Windows是文件索引號,Unix是索引節(jié)點(diǎn)號)
- st_mode:文件模式,包括文件類型和文件模式位(即權(quán)限位)。
- st_atime_ns:最近訪問時間,單位納秒
- st_mtime_ns:最近修改時間,單位納秒
- st_ctime_ns:文件創(chuàng)建時間(Windows),修改時間(unix),單位納秒
還有一些屬性需要在Unix系統(tǒng)上才能調(diào)用:
- st_blocks:文件的字節(jié)塊數(shù),每塊512字節(jié)。
- st_blksize:“首選的” 塊大小,用于提高文件系統(tǒng) I/O 效率。寫入文件時塊大小太小可能會導(dǎo)致讀取-修改-重寫效率低下。
- st_rdev:設(shè)備類型(針對inode設(shè)備)
- st_flags:文件標(biāo)志位(用戶定義的)
- st_gen:文件生成號
- st_birthtime:文件創(chuàng)建時間
os.utime() 修改文件時間
修改文件的訪問時間和修改時間,修改后需要重新獲取 stat_result 對象,才會更新。
語法
os.uime( path, (atime, mtime))
參數(shù)
- path:(必選)文件路徑
- atime:(必選)文件訪問時間
- mtime:(必選)文件修改時間
實(shí)例
import os os.utime('newDir/myFile', (1491413771, 1591413771)) statResult = os.stat('newDir/myFile') print(statResult.st_atime) print(statResult.st_mtime)
輸出:
1491413771.0
1591413771.0
os.rename() 修改文件/目錄
修改文件名或目錄名。
語法
os.rename( src, dst )
參數(shù)
- src:(必選)源文件/目錄,即需要修改的文件/目錄
- dst:(必選)目的文件/目錄,即修改后的文件/目錄
實(shí)例
import os os.rename('myFile', 'newName')
對于Windows系統(tǒng),文件名已存在會報錯 FileExistsError。
對于Unix系統(tǒng),將文件重命名為目錄會報錯 IsADirectoryError;將目錄重命名為文件會報錯 NotADirectoryError。
os.renames() 遞歸修改文件/目錄
遞歸修改文件名或目錄名。先創(chuàng)建所需要的中間目錄,重命名后,再調(diào)用 removedirs() 刪除舊路徑中不需要的目錄。
語法
os.renames( old, new )
參數(shù)
old:(必選)舊路徑new:(必選)新路徑
實(shí)例
import os os.renames('myFile', 'newDir/myFile')
os.replace() 替換文件/目錄
修改文件名或目錄名,如果文件名已存在,則會靜默修改;如果目錄已存在,則會報錯 OSError。
語法
os.replace( old, new )
參數(shù)
- old:(必選)修改前的路徑
- new:(必選)修改后的路徑
實(shí)例
import os os.replace('myFile', 'newDir/myFile')
os.remove() 刪除文件
刪除文件,刪除目錄會報錯 FileNotFoundError
語法
os.remove( path )
參數(shù)
- path:(必選)文件路徑(絕對路徑/相對路徑)
實(shí)例
import os os.remove('myFile')
os.getcwd() 獲取工作目錄
獲取當(dāng)前工作目錄,也就是當(dāng)前所在路徑,返回字符串類型。
import os print(os.getcwd())
輸出:
E:\data\PrCharm\pythonProject1
os.getcwdb() 獲取工作目錄
獲取當(dāng)前工作目錄,二進(jìn)制序列(bytes)類型。
import os print(os.getcwdb())
輸出:
b'E:\\data\\PrCharm\\pythonProject1'
os.chdir() 修改工作目錄
修改當(dāng)前工作目錄
語法
os.chdir( path )
參數(shù)
- path:(必選,str類型)需要修改的路徑
實(shí)例
import os os.chdir('E://data') print(os.getcwd())
輸出:
E:\data
os.mkdir() 創(chuàng)建目錄
創(chuàng)建目錄,如果目錄已存在會報錯 FileExistsError,如果路徑中父目錄不存在會報錯 FileNotFoundError。
語法
os.mkdir( path, mode )
參數(shù)
- path:(必選)目錄的路徑(絕對路徑/相對路徑)
- mode:目錄的權(quán)限(某些系統(tǒng)會忽略)
實(shí)例
import os os.mkdir('myDir')
當(dāng)前目錄下創(chuàng)建了目錄
os.makedirs() 創(chuàng)建多級目錄
創(chuàng)建多級目錄,上級目錄不存在也會自動創(chuàng)建。
語法
os.makedirs( path, mode )
參數(shù)
path:(必選)目錄的路徑(絕對路徑/相對路徑)mode:目錄的權(quán)限(某些系統(tǒng)會忽略)
實(shí)例
import os os.makedirs('myDir/dir1')
當(dāng)前目錄下創(chuàng)建了目錄
os.rmdir() 刪除目錄
刪除目錄,如果目錄不存在,會報錯 FileNotFoundError;如果目錄不為空,會報錯 OSError。
語法
os.rmdir( path )
參數(shù)
- path:(必選)需要刪除的目錄(絕對路徑/相對路徑)
實(shí)例
import os os.rmdir('newDir')
os.removedirs() 刪除多級目錄
遞歸刪除多級目錄,如果刪除了最后一級目錄,會嘗試依次刪除上級目錄(刪除不掉不會報錯,因?yàn)榇蠖嗍且驗(yàn)槟夸洸粸榭眨?/p>
語法
os.removedirs( path )
參數(shù)
- path:(必選)目錄路徑
實(shí)例
import os os.removedirs('myDir/dir1')
2、系統(tǒng)信息
os.name 獲取操作系統(tǒng)類型
獲取操作系統(tǒng)的類型,只有三個值 nt
、 posix
、 java
- nt:Windows系統(tǒng)
- posix:Linux/mac系統(tǒng)
- java:java虛擬機(jī)
比如,我的電腦是Windows,就返回 nt
import os print(os.name)
輸出:
nt
os.environ 獲取環(huán)境變量
獲取系統(tǒng)環(huán)境變量等各種系統(tǒng)信息(導(dǎo)入OS模塊時自動收集),字典格式,可以根據(jù)建獲取
Windows常用字段
os.environ['HOMEPATH'] # 當(dāng)前用戶主目錄。 os.environ['TEMP'] # 臨時目錄路徑。 os.environ["PATHEXT"] # 可執(zhí)行文件。 os.environ['SYSTEMROOT'] # 系統(tǒng)主目錄。 os.environ['LOGONSERVER'] # 機(jī)器名。
Linux常用字段
os.environ['USER'] # 當(dāng)前使用用戶。 os.environ['LC_COLLATE'] # 路徑擴(kuò)展的結(jié)果排序時的字母順序。 os.environ['SHELL'] # 使用shell的類型。 os.environ['LAN'] # 使用的語言。 os.environ['SSH_AUTH_SOCK'] # ssh的執(zhí)行路徑。
環(huán)境變量的增刪改查操作
import os environ = os.environ # 新增 environ['環(huán)境變量名'] = '環(huán)境變量值' # 刪除 del environ['環(huán)境變量名'] # 修改 environ['環(huán)境變量名'] = '新環(huán)境變量值' # 查詢(變量不存在則返回默認(rèn)值) environ['環(huán)境變量名'] environ.get('環(huán)境變量名', '默認(rèn)值') # 判斷(存在返回True,不存在返回False) '環(huán)境變量值' in environ
os.getenv() 獲取環(huán)境變量
根據(jù)環(huán)境變量名,獲取環(huán)境變量的值,如果環(huán)境變量名不存在,就返回default。
語法
os.getenv( key, default )
參數(shù)
- key:(必選,str類型)環(huán)境變量名
- default:(可選)環(huán)境變量不存在時返回,默認(rèn)值是 None
實(shí)例
import os print(os.getenv('TEMP'))
輸出:
C:\Users\WANGYU~1\AppData\Local\Temp
os.get_exec_path() 獲取可執(zhí)行文件路徑
獲取可執(zhí)行文件路徑,從 environ 對象中,返回可執(zhí)行文件目錄的列表。
語法
os.get_exec_path( environ )
參數(shù)
- environ:(可選)默認(rèn)值None,即使用當(dāng)前的 environ。
實(shí)例
import os print(os.get_exec_path())
輸出:
['E:\\data\\PrCharm\\pythonProject1\\venv\\Scripts', 'C:\\......
os.cpu_count() 獲取CPU數(shù)量
返回系統(tǒng)的CPU數(shù)量,不確定就返回None。
語法
os.cpu_count()
實(shí)例
import os print(os.cpu_count())
輸出:
8
os.getlogin() 獲取登錄用戶
獲取當(dāng)前登錄用戶,準(zhǔn)確來說,是通過控制終端進(jìn)程進(jìn)行登錄的用戶名。
import os print(os.getlogin())
os.getpid() 獲取當(dāng)前進(jìn)程ID
獲取當(dāng)前進(jìn)程ID
import os print(os.getpid())
輸出:
8212
os.getppid() 獲取父進(jìn)程ID
獲取當(dāng)前進(jìn)程的父進(jìn)程ID
import os print(os.getppid())
輸出:
14132
os.urandom() 獲取隨機(jī)字節(jié)
獲取指定大小的隨機(jī)字節(jié),常用于加密。
語法
os.urandom( size )
參數(shù)
- size:(必選)指定隨機(jī)字節(jié)的大小
實(shí)例
mport os print(os.urandom(8))
輸出:
b'\xb1\n\xbaw2\x88\x84\xf8'
3、進(jìn)程管理
創(chuàng)建和管理進(jìn)程的函數(shù)。
os.times() 獲取進(jìn)程時間
返回當(dāng)前的全局進(jìn)程時間,列表形式,有5個屬性。
- user:用戶時間
- system:系統(tǒng)時間
- children_user:所有子進(jìn)程的用戶時間
- children_system:所有子進(jìn)程的系統(tǒng)時間
- elapsed:從過去的固定時間點(diǎn)起,經(jīng)過的真實(shí)時間
Windows系統(tǒng)上,只有user、system兩個屬性有值,其他均為0。
語法
os.times()
實(shí)例
import os times = os.times() print(times)
輸出:
nt.times_result(user=0.046875, system=0.109375, children_user=0.0, children_system=0.0, elapsed=0.0)
os.abort() 中斷當(dāng)前進(jìn)程
發(fā)送 SIGABRT
信號給當(dāng)前進(jìn)程,用來終止進(jìn)程,如果進(jìn)程沒有中斷,則函數(shù)不會返回。
- Unix系統(tǒng)會生成一個核心轉(zhuǎn)儲文件
- Windows系統(tǒng)立即返回退出代碼
語法
os.abort()
比如,當(dāng)程序出現(xiàn)嚴(yán)重錯誤時,調(diào)用 os.abort() 終止進(jìn)程。
import os try: # 業(yè)務(wù)代碼 pass except: os.abort()
補(bǔ)充:
- SIGABRT用來中止一個程序,處理函數(shù)返回后,所有打開的文件描述符將會被關(guān)閉,流也會被flush,程序也會結(jié)束。
- SIGABRT是一個暴力信號,可能會破壞進(jìn)程的狀態(tài),應(yīng)該謹(jǐn)慎使用。
os.system() 執(zhí)行系統(tǒng)命令
執(zhí)行系統(tǒng)命令,并在控制臺輸出執(zhí)行結(jié)果
語法
os.system( commend )
參數(shù)
commend:(必選)需要執(zhí)行的命令
實(shí)例
import os os.system('ping www.baidu.com')
輸出:
???? Ping www.a.shifen.com [39.156.66.18] ???? 32 ????????:
???? 39.156.66.18 ????: ???=32 ???=17ms TTL=50
???? 39.156.66.18 ????: ???=32 ???=16ms TTL=50
os.popen() 執(zhí)行shell命令
通過Python執(zhí)行系統(tǒng)命令,返回命令的執(zhí)行結(jié)果(文本類型的對象)。
語法
os.popen( command, mode, buffer )
參數(shù)
- command:(必選)需要執(zhí)行的命令
- mode:(可選)文件打開模式,默認(rèn)值
r
(只讀模式) - buffer:緩沖區(qū)大小,
實(shí)例
import os out = os.popen('ping www.baidu.com') print(out.read())
輸出:
正在 Ping www.a.shifen.com [39.156.66.14] 具有 32 字節(jié)的數(shù)據(jù):
來自 39.156.66.14 的回復(fù): 字節(jié)=32 時間=13ms TTL=50
來自 39.156.66.14 的回復(fù): 字節(jié)=32 時間=48ms TTL=50
os.startfile() 打開文件
自動打開文件,絕對路徑要用 /
,相對路徑要用 \
語法
os.startfile( path )
實(shí)例
import os os.startfile('newDir\myFile')
執(zhí)行后,桌面上會打開指定的文件。
4、錯誤/異常
OS模塊所有函數(shù)都會拋出 OSError
及其子類
BlockingIOError
OSError
的子類
當(dāng)在設(shè)置為非阻塞操作的對象(例如:套接字)上,執(zhí)行阻塞操作時觸發(fā)。
ChildProcessError
OSError
的子類
子進(jìn)程上的操作失敗時觸發(fā)。
ConnectionError
OSError
的子類
與連接相關(guān)的問題的基類,常見的有它的子類。
BrokenPipeError
ConnectionError
的子類
管道中斷時觸發(fā)。
管道是單向通信的,在管道另一端關(guān)閉時寫入,或者在已經(jīng)關(guān)閉的套接字上寫入,都會導(dǎo)致管道中斷。
ConnectionAbortedError
ConnectionError
的子類
連接被對端終止時觸發(fā)。
這種異常通常意味著網(wǎng)絡(luò)連接被意外中斷,可能是服務(wù)器出現(xiàn)故障、網(wǎng)絡(luò)擁堵等原因?qū)е碌?,比?服務(wù)器返回的響應(yīng)超時或斷開了連接。
ConnectionRefusedError
ConnectionError
的子類
連接被對方拒絕時觸發(fā)。
常見的原因有:
你想連接的服務(wù)器沒有啟動相關(guān)服務(wù)防火墻阻止連接端口被占用,關(guān)閉占用端口的服務(wù)IP或端口錯誤 ConnectionResetError
ConnectionError
的子類
對端重置連接時觸發(fā)。
常見的原因有:
高延遲或丟包等網(wǎng)絡(luò)錯誤導(dǎo)致連接中斷防火墻等ACL訪問控制出于安全原因阻止了連接 FileExistsError
OSError
的子類
創(chuàng)建的文件或目錄已經(jīng)存在時觸發(fā)
FileNotFoundError
OSError
的子類
請求的文件或目錄不存在時觸發(fā)
InterruptedError
OSError
的子類
系統(tǒng)調(diào)用被傳入信號中斷時觸發(fā)
IsADirectoryError
OSError
的子類
對目錄執(zhí)行文件操作時觸發(fā)
NotADirectoryError
OSError
的子類
對文件執(zhí)行目錄操作時觸發(fā)
PermissionError
OSError
的子類
執(zhí)行的操作沒有足夠的訪問權(quán)限時觸發(fā)
ProcessLookupError
OSError
的子類
指定的進(jìn)程不存在時觸發(fā)
TimeoutError
OSError
的子類
系統(tǒng)功能在系統(tǒng)級別的超時時觸發(fā)
以上就是Python標(biāo)準(zhǔn)庫之os模塊詳解的詳細(xì)內(nèi)容,更多關(guān)于Python os模塊的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux下使用python自動修改本機(jī)網(wǎng)關(guān)代碼分享
這篇文章主要介紹了Linux下使用python自動修改本機(jī)網(wǎng)關(guān)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法
這篇文章主要介紹了Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python使用內(nèi)置的json模塊實(shí)現(xiàn)json格式數(shù)據(jù)的解析、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-07-07解決Python 異常TypeError: cannot concatenate ''str'' and ''int''
這篇文章主要介紹了解決Python 異常TypeError: cannot concatenate 'str' and 'int' objects,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Tensorflow卷積實(shí)現(xiàn)原理+手寫python代碼實(shí)現(xiàn)卷積教程
這篇文章主要介紹了Tensorflow卷積實(shí)現(xiàn)原理+手寫python代碼實(shí)現(xiàn)卷積教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05PyCharm創(chuàng)建Django項(xiàng)目的簡單步驟記錄
PyCharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,下面這篇文章主要給大家介紹了關(guān)于利用PyCharm創(chuàng)建Django項(xiàng)目的簡單步驟,需要的朋友可以參考下2022-07-07關(guān)于PySnooper 永遠(yuǎn)不要使用print進(jìn)行調(diào)試的問題
這篇文章主要介紹了關(guān)于PySnooper 永遠(yuǎn)不要使用print進(jìn)行調(diào)試的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03