「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:小白零基礎(chǔ)《Python入門到精通》
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),返回一個(gè) stat_result 對(duì)象。
stat_result對(duì)象有很多可以調(diào)用的屬性:
- st_atime:最近訪問時(shí)間,單位秒
- st_mtime:最近修改時(shí)間,單位秒
- st_ctime:文件創(chuàng)建時(shí)間(Windows),修改時(shí)間(unix),單位秒
- st_size:文件大小,單位字節(jié)
- st_uid:文件所有者的ID
- st_nlink:硬鏈接數(shù)量
- st_dev:文件所在設(shè)備的標(biāo)識(shí)符
- st_ino:文件的唯一標(biāo)識(shí)(Windows是文件索引號(hào),Unix是索引節(jié)點(diǎn)號(hào))
- st_mode:文件模式,包括文件類型和文件模式位(即權(quán)限位)。
- st_atime_ns:最近訪問時(shí)間,單位納秒
- st_mtime_ns:最近修改時(shí)間,單位納秒
- st_ctime_ns:文件創(chuàng)建時(shí)間(Windows),修改時(shí)間(unix),單位納秒
還有一些屬性需要在Unix系統(tǒng)上才能調(diào)用:
- st_blocks:文件的字節(jié)塊數(shù),每塊512字節(jié)。
- st_blksize:“首選的” 塊大小,用于提高文件系統(tǒng) I/O 效率。寫入文件時(shí)塊大小太小可能會(huì)導(dǎo)致讀取-修改-重寫效率低下。
- st_rdev:設(shè)備類型(針對(duì)inode設(shè)備)
- st_flags:文件標(biāo)志位(用戶定義的)
- st_gen:文件生成號(hào)
- st_birthtime:文件創(chuàng)建時(shí)間
os.utime() 修改文件時(shí)間
修改文件的訪問時(shí)間和修改時(shí)間,修改后需要重新獲取 stat_result 對(duì)象,才會(huì)更新。
語法
os.uime( path, (atime, mtime))
參數(shù)
- path:(必選)文件路徑
- atime:(必選)文件訪問時(shí)間
- mtime:(必選)文件修改時(shí)間
實(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')
對(duì)于Windows系統(tǒng),文件名已存在會(huì)報(bào)錯(cuò) FileExistsError。
對(duì)于Unix系統(tǒng),將文件重命名為目錄會(huì)報(bào)錯(cuò) IsADirectoryError;將目錄重命名為文件會(huì)報(bào)錯(cuò) 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() 替換文件/目錄
修改文件名或目錄名,如果文件名已存在,則會(huì)靜默修改;如果目錄已存在,則會(huì)報(bào)錯(cuò) OSError。
語法
os.replace( old, new )
參數(shù)
- old:(必選)修改前的路徑
- new:(必選)修改后的路徑
實(shí)例
import os
os.replace('myFile', 'newDir/myFile')
os.remove() 刪除文件
刪除文件,刪除目錄會(huì)報(bào)錯(cuò) FileNotFoundError
語法
os.remove( path )
參數(shù)
- path:(必選)文件路徑(絕對(duì)路徑/相對(duì)路徑)
實(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)建目錄,如果目錄已存在會(huì)報(bào)錯(cuò) FileExistsError,如果路徑中父目錄不存在會(huì)報(bào)錯(cuò) FileNotFoundError。
語法
os.mkdir( path, mode )
參數(shù)
- path:(必選)目錄的路徑(絕對(duì)路徑/相對(duì)路徑)
- mode:目錄的權(quán)限(某些系統(tǒng)會(huì)忽略)
實(shí)例
import os
os.mkdir('myDir')
當(dāng)前目錄下創(chuàng)建了目錄
os.makedirs() 創(chuàng)建多級(jí)目錄
創(chuàng)建多級(jí)目錄,上級(jí)目錄不存在也會(huì)自動(dòng)創(chuàng)建。
語法
os.makedirs( path, mode )
參數(shù)
- path:(必選)目錄的路徑(絕對(duì)路徑/相對(duì)路徑)
- mode:目錄的權(quán)限(某些系統(tǒng)會(huì)忽略)
實(shí)例
import os
os.makedirs('myDir/dir1')
當(dāng)前目錄下創(chuàng)建了目錄
os.rmdir() 刪除目錄
刪除目錄,如果目錄不存在,會(huì)報(bào)錯(cuò) FileNotFoundError;如果目錄不為空,會(huì)報(bào)錯(cuò) OSError。
語法
os.rmdir( path )
參數(shù)
- path:(必選)需要?jiǎng)h除的目錄(絕對(duì)路徑/相對(duì)路徑)
實(shí)例
import os
os.rmdir('newDir')
os.removedirs() 刪除多級(jí)目錄
遞歸刪除多級(jí)目錄,如果刪除了最后一級(jí)目錄,會(huì)嘗試依次刪除上級(jí)目錄(刪除不掉不會(huì)報(bào)錯(cuò),因?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)的類型,只有三個(gè)值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模塊時(shí)自動(dòng)收集),字典格式,可以根據(jù)建獲取
Windows常用字段
os.environ['HOMEPATH'] # 當(dāng)前用戶主目錄。
os.environ['TEMP'] # 臨時(shí)目錄路徑。
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é)果排序時(shí)的字母順序。
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)境變量不存在時(shí)返回,默認(rèn)值是 None
實(shí)例
import os
print(os.getenv('TEMP'))
輸出:
C:\Users\WANGYU~1\AppData\Local\Temp
os.get_exec_path() 獲取可執(zhí)行文件路徑
獲取可執(zhí)行文件路徑,從 environ 對(duì)象中,返回可執(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'
2、進(jìn)程管理
創(chuàng)建和管理進(jìn)程的函數(shù)。
os.times() 獲取進(jìn)程時(shí)間
返回當(dāng)前的全局進(jìn)程時(shí)間,列表形式,有5個(gè)屬性。
- user:用戶時(shí)間
- system:系統(tǒng)時(shí)間
- children_user:所有子進(jìn)程的用戶時(shí)間
- children_system:所有子進(jìn)程的系統(tǒng)時(shí)間
- elapsed:從過去的固定時(shí)間點(diǎn)起,經(jīng)過的真實(shí)時(shí)間
Windows系統(tǒng)上,只有user、system兩個(gè)屬性有值,其他均為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
信號(hào)給當(dāng)前進(jìn)程,用來終止進(jìn)程,如果進(jìn)程沒有中斷,則函數(shù)不會(huì)返回。
- Unix系統(tǒng)會(huì)生成一個(gè)核心轉(zhuǎn)儲(chǔ)文件
- Windows系統(tǒng)立即返回退出代碼
語法
os.abort()
比如,當(dāng)程序出現(xiàn)嚴(yán)重錯(cuò)誤時(shí),調(diào)用 os.abort() 終止進(jìn)程。
import os
try:
# 業(yè)務(wù)代碼
pass
except:
os.abort()
補(bǔ)充:
- SIGABRT用來中止一個(gè)程序,處理函數(shù)返回后,所有打開的文件描述符將會(huì)被關(guān)閉,流也會(huì)被flush,程序也會(huì)結(jié)束。
- SIGABRT是一個(gè)暴力信號(hào),可能會(huì)破壞進(jìn)程的狀態(tài),應(yīng)該謹(jǐn)慎使用。
os.system() 執(zhí)行系統(tǒng)命令
執(zhí)行系統(tǒng)命令,并在控制臺(tái)輸出執(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é)果(文本類型的對(duì)象)。
語法
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 時(shí)間=13ms TTL=50
來自 39.156.66.14 的回復(fù): 字節(jié)=32 時(shí)間=48ms TTL=50
os.startfile() 打開文件
自動(dòng)打開文件,絕對(duì)路徑要用/
,相對(duì)路徑要用 \
語法
os.startfile( path )
實(shí)例
import os
os.startfile('newDir\myFile')
執(zhí)行后,桌面上會(huì)打開指定的文件。
3、錯(cuò)誤/異常
OS模塊所有函數(shù)都會(huì)拋出OSError
及其子類
BlockingIOError
OSError
的子類文章來源:http://www.zghlxwxcb.cn/news/detail-635478.html
當(dāng)在設(shè)置為非阻塞操作的對(duì)象(例如:套接字)上,執(zhí)行阻塞操作時(shí)觸發(fā)。
ChildProcessError
OSError
的子類
子進(jìn)程上的操作失敗時(shí)觸發(fā)。
ConnectionError
OSError
的子類
與連接相關(guān)的問題的基類,常見的有它的子類。
BrokenPipeError
ConnectionError
的子類
管道中斷時(shí)觸發(fā)。
管道是單向通信的,在管道另一端關(guān)閉時(shí)寫入,或者在已經(jīng)關(guān)閉的套接字上寫入,都會(huì)導(dǎo)致管道中斷。
ConnectionAbortedError
ConnectionError
的子類
連接被對(duì)端終止時(shí)觸發(fā)。
這種異常通常意味著網(wǎng)絡(luò)連接被意外中斷,可能是服務(wù)器出現(xiàn)故障、網(wǎng)絡(luò)擁堵等原因?qū)е碌?,比?服務(wù)器返回的響應(yīng)超時(shí)或斷開了連接。
ConnectionRefusedError
ConnectionError
的子類
連接被對(duì)方拒絕時(shí)觸發(fā)。
常見的原因有:
- 你想連接的服務(wù)器沒有啟動(dòng)相關(guān)服務(wù)
- 防火墻阻止連接
- 端口被占用,關(guān)閉占用端口的服務(wù)
- IP或端口錯(cuò)誤
ConnectionResetError
ConnectionError
的子類
對(duì)端重置連接時(shí)觸發(fā)。
常見的原因有:
- 高延遲或丟包等網(wǎng)絡(luò)錯(cuò)誤導(dǎo)致連接中斷
- 防火墻等ACL訪問控制出于安全原因阻止了連接
FileExistsError
OSError
的子類
創(chuàng)建的文件或目錄已經(jīng)存在時(shí)觸發(fā)
FileNotFoundError
OSError
的子類
請(qǐng)求的文件或目錄不存在時(shí)觸發(fā)
InterruptedError
OSError
的子類
系統(tǒng)調(diào)用被傳入信號(hào)中斷時(shí)觸發(fā)
IsADirectoryError
OSError
的子類
對(duì)目錄執(zhí)行文件操作時(shí)觸發(fā)
NotADirectoryError
OSError
的子類
對(duì)文件執(zhí)行目錄操作時(shí)觸發(fā)
PermissionError
OSError
的子類
執(zhí)行的操作沒有足夠的訪問權(quán)限時(shí)觸發(fā)
ProcessLookupError
OSError
的子類
指定的進(jìn)程不存在時(shí)觸發(fā)
TimeoutError
OSError
的子類
系統(tǒng)功能在系統(tǒng)級(jí)別的超時(shí)時(shí)觸發(fā)文章來源地址http://www.zghlxwxcb.cn/news/detail-635478.html
到了這里,關(guān)于《Python入門到精通》os模塊詳解,Python os標(biāo)準(zhǔn)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!