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