原文中具體闡述了Python中能用三種方式分辨文檔存不存在,原文中根據(jù)實(shí)例編碼推薦的十分詳盡,對(duì)大家學(xué)習(xí)培訓(xùn)或工作具有很強(qiáng)的參照學(xué)習(xí)培訓(xùn)使用價(jià)值,須要的小伙伴們下邊伴隨著小編就來(lái)互相學(xué)習(xí)了解一下吧
通常是在讀寫文件以前,須要分辨文件或目錄存不存在,要不然一些處理辦法可能會(huì)讓程序流程出差錯(cuò)。所以盡量在進(jìn)行任何實(shí)際操作以前,先分辨文檔存不存在。
在這里將講解3種分辨文件或文件夾是不是存有的方式,各自使用os控制模塊、Try句子、pathlib模塊。
1.使用os控制模塊
os控制模塊里的os.path.exists()方式用以檢測(cè)文檔存不存在。
判斷文件是否存在
import os os.path.exists(test_file.txt) #True os.path.exists(no_exist_file.txt) #False
判斷文件夾是否存在
import os os.path.exists(test_dir) #True os.path.exists(no_exist_dir) #False
可以看出用os.path.exists()方法,判斷文件和文件夾是一樣。
其實(shí)這種方法還是有個(gè)問題,假設(shè)你想檢查文件“test_data”是否存在,但是當(dāng)前路徑下有個(gè)叫“test_data”的文件夾,這樣就可能出現(xiàn)誤判。為了避免這樣的情況,可以這樣:
只檢查文件
import os os.path.isfile("test-data")
通過這個(gè)方法,如果文件”test-data”不存在將返回False,反之返回True。
即是文件存在,你可能還需要判斷文件是否可進(jìn)行讀寫操作。
判斷文件是否可做讀寫操作
使用os.access()方法判斷文件是否可進(jìn)行讀寫操作。
語(yǔ)法:
os.access(path,mode)
path為文件路徑,mode為操作模式,有這么幾種:
os.F_OK:檢查文件是否存在;
os.R_OK:檢查文件是否可讀;
os.W_OK:檢查文件是否可以寫入;
os.X_OK:檢查文件是否可以執(zhí)行
該方法通過判斷文件路徑是否存在和各種訪問模式的權(quán)限返回True或者False。
import os if os.access("/file/path/foo.txt",os.F_OK): print("Given file path is exist.") if os.access("/file/path/foo.txt",os.R_OK): print("File is accessible to read") if os.access("/file/path/foo.txt",os.W_OK): print("File is accessible to write") if os.access("/file/path/foo.txt",os.X_OK): print("File is accessible to execute")
2.使用Try語(yǔ)句
可以在程序中直接使用open()方法來(lái)檢查文件是否存在和可讀寫。
語(yǔ)法:
open()
如果你open的文件不存在,程序會(huì)拋出錯(cuò)誤,使用try語(yǔ)句來(lái)捕獲這個(gè)錯(cuò)誤。
程序無(wú)法訪問文件,可能有很多原因:
如果你open的文件不存在,將拋出一個(gè)FileNotFoundError的異常;
文件存在,但是沒有權(quán)限訪問,會(huì)拋出一個(gè)PersmissionError的異常。
所以可以使用下面的代碼來(lái)判斷文件是否存在:
try: f=open() f.close() except FileNotFoundError: print("File is not found.") except PermissionError: print("You don't have permission to access this file.")
其實(shí)沒有必要去這么細(xì)致的處理每個(gè)異常,上面的這兩個(gè)異常都是IOError的子類。所以可以將程序簡(jiǎn)化一下:
使用try句子作出判斷,解決全部出現(xiàn)異常比較簡(jiǎn)單和典雅的。并且相較于其他不用引進(jìn)別的外界控制模塊。
3.使用pathlib模塊
pathlib模塊在Python3版本是內(nèi)設(shè)控制模塊,但在Python2中也是需要獨(dú)立組裝第三方控制模塊。
使用pathlib必須要先應(yīng)用目標(biāo)文件夾來(lái)建立path目標(biāo)。此途徑能是文件夾名稱或文件目錄途徑。
查驗(yàn)途徑存不存在
path=pathlib.Path("path/file") path.exist()
檢查路徑是否是文件
path=pathlib.Path("path/file") path.is_file()
綜上所述,這篇文章就給大家介紹完畢了,希望可以給大家?guī)?lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/128730.html
摘要:高階函數(shù)驗(yàn)證中間件驗(yàn)證驗(yàn)證之所以用三種方式一起是因?yàn)楦唠A函數(shù)在性能調(diào)優(yōu)的時(shí)候并不是特別容易??偨Y(jié)高階函數(shù)適合用在子控件需要確定權(quán)限后渲染中間件適合無(wú)狀態(tài)頁(yè)面中的登錄狀態(tài)判斷驗(yàn)證,使用范圍就比較狹窄了。 最近一直在寫一個(gè)React、Redux的前端項(xiàng)目,登錄狀態(tài)驗(yàn)證這一塊還是比較頭疼的。 我的實(shí)踐下有三種方式來(lái)驗(yàn)證用戶登錄狀態(tài),目前我選擇用三種方式一起用在項(xiàng)目里面。 Redux高階函數(shù)...
摘要:阻塞原理瀏覽器內(nèi)核可以分成兩部分渲染引擎或者和引擎。等引擎運(yùn)行完畢,瀏覽器又會(huì)把控制權(quán)還給渲染引擎,繼續(xù)和的構(gòu)建。執(zhí)行時(shí),解析暫停。從加載完成立即執(zhí)行來(lái)看,模式執(zhí)行順序與寫的順序無(wú)關(guān),不保證執(zhí)行順序。 js阻塞原理 瀏覽器內(nèi)核可以分成兩部分:渲染引擎(Layout Engine 或者 Rendering Engine)和 JS 引擎。早期渲染引擎和 JS 引擎并沒有十分明確的區(qū)分,但隨...
摘要:上個(gè)月,學(xué)習(xí)群里的同學(xué)問了個(gè)題目,大意可理解為列表降維,例子如下想得到結(jié)果原始數(shù)據(jù)是一個(gè)二維列表,目的是獲取該列表中所有元素的具體值。不經(jīng)意間,函數(shù)的注意事項(xiàng),竟把其它的進(jìn)階內(nèi)容都聯(lián)系起來(lái)了。小小的函數(shù),竟成為學(xué)習(xí)之路上的一個(gè)樞紐。 上個(gè)月,學(xué)習(xí)群里的 S 同學(xué)問了個(gè)題目,大意可理解為列表降維 ,例子如下: oldlist = [[1, 2, 3], [4, 5]] # 想得到結(jié)果:...
閱讀 1068·2023-01-14 11:38
閱讀 1064·2023-01-14 11:04
閱讀 905·2023-01-14 10:48
閱讀 2380·2023-01-14 10:34
閱讀 1148·2023-01-14 10:24
閱讀 1028·2023-01-14 10:18
閱讀 656·2023-01-14 10:09
閱讀 735·2023-01-14 10:02