Python必知必會之os模塊實例詳解
Python os 模塊
os是“operating system”的縮寫,os模塊提供各種 Python 程序與操作系統(tǒng)進(jìn)行交互的接口,使用os模塊,一方面可以方便地與操作系統(tǒng)進(jìn)行交互,另一方面頁可以極大增強(qiáng)代碼的可移植性
注意 一定要使用 import os 而不是 from os import * 。這將避免內(nèi)建的 open() 函數(shù)被 os.open() 隱式替換掉,因為它們的使用方式大不相同。
os模塊的常用操作
import os
os.getcwd() 獲取當(dāng)前工作路徑
os.getcwd()
os.chdir() 切換工作路徑
# 將工作目錄切換到'D:/Pycharm' os.chdir('D:/Pycharm') print(os.getcwd()) #D:\Pycharm
os.environ 獲取所有的環(huán)境變量,
os.environ
os.getlogin()返回通過控制終端進(jìn)程進(jìn)行登錄的用戶名
os.getlogin()
os.name 返回python運(yùn)行的環(huán)境系統(tǒng)
os.name ''' 返回值的意思 posix Linux 和 Mac OS nt Windows java Java 虛擬機(jī)環(huán)境 '''
- os.mkdir 創(chuàng)建一個新的文件價夾,不能創(chuàng)建多級的文件夾
當(dāng)文件夾已經(jīng)存在時會報錯FileExistsError
創(chuàng)建多級的文件夾會報錯FileNotFoundError
# 在當(dāng)前目錄下創(chuàng)建一個名為test的文件夾 os.mkdir('test') # 報錯內(nèi)容 # FileExistsError: [WinError 183] 當(dāng)文件已存在時,無法創(chuàng)建該文件。: 'test'
- os.makedirs() 創(chuàng)建多級目錄
# 創(chuàng)建a文件夾,并且在a文件夾下創(chuàng)建b文件夾 os.makedirs('a/b')
- os.rmdir() 刪除空文件夾
如果如果刪除的文件夾非空OSError: [WinError 145] 目錄不是空的。'filename'
# 刪除文件夾a os.rmdir('a')
- os.removedirs() 遞歸刪除目錄。
工作方式類似于 rmdir(),不同之處在于,如果成功刪除了末尾一級目錄,removedirs() 會嘗試依次刪除 path 中提到的每個父目錄,直到拋出錯誤為止(但該錯誤會被忽略,因為這通常表示父目錄不是空目錄)
# 刪除文件夾 文件夾 a及子文件夾b os.removedirs('a/b')
- os.remove() 刪除文件
# 刪除文件a.txt os.remove('a.txt')
- os.rename(src, dst) 將文件或路徑(文件夾)重命名,以及移動文件夾
src 原路徑,dst修改后的命名
只能重命名原路徑 src
最后的路徑或文件的名字,中間路徑都必須要存在,否則就會拋出FileNotFoundError
# 將文件名b修改成文件名c os.rename('a/b','a/c') # 文件目錄: a/c c文件夾是a文件夾的子文件夾 # 將文件c移動到和a同級目錄下 os.rename('a/c','c') # 文件目錄: a/c c文件夾是a文件夾的子文件夾 # 將文件c移動到和a同級目錄下并改名為'newname' os.rename('a/c','newname') # 文件目錄: a/c/w.txt # 將文件w.txt修改成ww.txr os.rename('a/c/w.txt','a/c/ww.txt') # 同樣也可以移動文件并重名的方式一樣,用法和移動文件并重名的方式一樣
os.renames(old, new)遞歸重命名目錄或文件。工作方式類似 rename(),除了會首先創(chuàng)建新路徑所需的中間目錄。重命名后,將調(diào)用 removedirs() 刪除舊路徑中不需要的目錄。
# 重命名可以重命名中間路徑(實際上是,先新建新的目錄,然后判斷原目錄是否可以刪除,如果可以刪除,就刪除) os.renames('a/b/a.txt','a/c/aaa.txt')
os.path模塊
os.path中的函數(shù)基本上是純粹的字符串操作。換句話說,傳入該模塊函數(shù)的參數(shù)甚至不需要是一個有效路徑,該模塊也不會試圖訪問這個路徑,而僅僅是按照“路徑”的通用格式對字符串進(jìn)行處理
os.path 獲取當(dāng)前環(huán)境的路徑
os.path
os.path.abspath(path) 返回路徑 path 的絕對路徑
# 根據(jù)相對路徑返回絕對路徑 print(os.path.abspath('a/c/aaa.txt'))
os.path.exists(path) 判斷該路徑或文件是否存在
path:路徑
返回布爾值,True,F(xiàn)alse
# 檢查文件是否存在 print(os.path.exists('a/c')) # 檢查aaa.txt文件是否存在 print(os.path.exists('a/c/aaa.txt'))
os.path.getatime(path)返回path的最后訪問時間,返回的時間為秒(時間戳),可以利用tiem轉(zhuǎn)換成常用的時間格式
# 返回文件a最后的訪問時間 print(os.path.getatime('a')) t = os.path.getatime('a') # 獲取時間戳 tupTime = time.localtime(t) # 將時間戳轉(zhuǎn)換成本地時間 stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime) # 轉(zhuǎn)換成對應(yīng)的時間格式 print(stadardTime) # 2022-09-18 11:44:28
os.path.getctime(path) 在windos下獲取文件的創(chuàng)建時間,在Unix返回的是最后的修改時間
# 獲取aaa.txt文件的創(chuàng)建時間(windows) t = os.path.getctime('a/c/aaa.txt')
os.path.getsize(path) 獲取文件的大小
# 獲取文件aaa.txt的大小 os.path.getsize('a/c/aaa.txt')
os.path.split() 將路徑 path 拆分為一對,即 (head, tail),其中,tail 是路徑的最后一部分,而 head 里是除最后部分外的所有內(nèi)容。tail 部分不會包含斜杠,如果 path 以斜杠結(jié)尾,則 tail 將為空。如果 path 中沒有斜杠,head 將為空。如果 path 為空,則 head 和 tail 均為空。
返回的部分是一個元組里面由兩個元素
a = os.path.split('D:/aa/bb') print(type(a)) # <class 'tuple'> print(a) # ('D:/aa', 'bb') 頭部和尾部 # 當(dāng)最后為'/‘時 a = os.path.split('D:/aa/bb/') print(a) # ('D:/aa/bb', '') 尾部為空 # 當(dāng)路徑path中沒有路徑的時候 a = os.path.split('aa') print(a) # ('', 'aa') # 頭部為空 # 當(dāng)傳入的路徑為空時 a = os.path.split( '') print(a) # ('', '') # 頭部和尾部均為空
os.path.isfile() 判斷傳入的文件是否存在 返回布爾值
# 判斷文件是否存在 os.path.isfile('a/c/aaa.txt')
os.path.isdir() # 判斷文件路徑是否存在 返回布爾值
# 判斷路徑a/c是否存在 os.path.isdir('a/c')
os.open()模塊
os.open() 打開文件的一系列操作
用法和基本的open函數(shù)很類似
注解 本函數(shù)適用于底層的 I/O。常規(guī)用途請使用內(nèi)置函數(shù) open(),該函數(shù)的 read() 和 write() 方法(及其他方法)會返回 文件對象。要將文件描述符包裝在文件對象中,請使用 fdopen()。
os.open(file, flags[, mode]) ''' file 文件名 flags 模式 mode 可選參數(shù), mode 設(shè)置其權(quán)限狀態(tài) '''
flags – 該參數(shù)可以是以下選項,多個使用 “|” 隔開:
- os.O_RDONLY: 以只讀的方式打開
- os.O_WRONLY: 以只寫的方式打開
- os.O_RDWR : 以讀寫的方式打開
- os.O_NONBLOCK: 打開時不阻塞
- os.O_APPEND: 以追加的方式打開
- os.O_CREAT: 創(chuàng)建并打開一個新文件
- os.O_TRUNC: 打開一個文件并截斷它的長度為零(必須有寫權(quán)限)
- os.O_EXCL: 如果指定的文件存在,返回錯誤
- os.O_SHLOCK: 自動獲取共享鎖
- os.O_EXLOCK: 自動獲取獨(dú)立鎖
- os.O_DIRECT: 消除或減少緩存效果
- os.O_FSYNC : 同步寫入
- os.O_NOFOLLOW: 不追蹤軟鏈接
在寫入文件時不能直接寫入字符串否則會報錯TypeError: a bytes-like object is required, not 'str'
# 打開文件 fd = os.open("foo.txt", os.O_RDWR|os.O_CREAT ) # 模式可以并存中間用 | 隔開 # 寫入字符串 a = b"This is test" os.write(fd,a) # 關(guān)閉文件 os.close(fd) print("關(guān)閉文件成功!!")
最后的補(bǔ)充
最后如果忘記了os的用法可以使用內(nèi)置的 dir()
和 help()
函數(shù)來查看函數(shù)的用法
dir()
返回一個列表包括 os模塊的所有函數(shù)名
print(dir(os))
help()
返回所有os模塊的所有內(nèi)容
print(help(os))
這樣的結(jié)果看著確實有點不太人性化
使用help
函數(shù)查看具體的函數(shù)使用方法
print(help(os.getcwd)) print(help('os.getcwd')) # 使用字符串也可以
返回函數(shù)的作用
總結(jié)
到此這篇關(guān)于Python必知必會之os模塊的文章就介紹到這了,更多相關(guān)Python os 模塊詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解(3)
這篇文章主要為大家詳細(xì)介紹了Python中的棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03Python time模塊詳解(常用函數(shù)實例講解,非常好)
在平常的代碼中,我們常常需要與時間打交道。在Python中,與時間處理有關(guān)的模塊就包括:time,datetime以及calendar。這篇文章,主要講解time模塊。2014-04-04