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