當前位置:
首頁 > 知識 > Python判斷文件是否存在的三種方法

Python判斷文件是否存在的三種方法

通常在讀寫文件之前,需要判斷文件或目錄是否存在,不然某些處理方法可能會使程序出錯。所以最好在做任何操作之前,先判斷文件是否存在。

這裡將介紹三種判斷文件或文件夾是否存在的方法,分別使用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為操作模式,有這麼幾種:

  • 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 PersmissionError:
print "You don"t have permission to access this file."

其實沒有必要去這麼細緻的處理每個異常,上面的這兩個異常都是IOError的子類。所以可以將程序簡化一下:

try:
f =open
f.close
except IOError:
print "File is not accessible."

使用try語句進行判斷,處理所有異常非常簡單和優雅的。而且相比其他不需要引入其他外部模塊。

3. 使用pathlib模塊

pathlib模塊在Python3版本中是內建模塊,但是在Python2中是需要單獨安裝三方模塊。

使用pathlib需要先使用文件路徑來創建path對象。此路徑可以是文件名或目錄路徑。

  • 檢查路徑是否存在

path = pathlib.Path("path/file")
path.exist

  • 檢查路徑是否是文件

path = pathlib.Path("path/file")
path.is_file

博客原文:http://www.spiderpy.cn/blog/detail/28

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

vue怎麼樣創建組件呢?
在運行階段修改應用配置文件
python數據結構鏈表之單向鏈表
C/C++中static的用法全局變數與局部變數

TAG:達人科技 |

您可能感興趣

POJO 對象setter 方法是否合適return 「this」
法規里的Should和Must是否有區別?
微軟是否有意徹底淘汰Windows Media Player?
ios系統更新,決定了你的iPhone6s是否有力再戰!
iphone被破解竟然是為了正義?破解iphone是否有意義!
微軟是否準備好關閉Windows Media Player?
Whether the Mind of Desire for Dharma is Strong Enough希求正法之心是否強烈
Anti Social Social Club亞洲限定新作釋出,你是否買單?
Nine precent顏值是否力壓韓國出道的wanna one?
Android手機是否應該跟著蘋果iPhone X弄劉海?
iPhone X又出問題,蘋果公司已確認,速查你的是否存在?
FAQ詳解「Meltdown和Spectre」問題,接踵而來的「Skyfall和Solace」是否僅是騙局?
Kanye West 的失常,是否是一場 「陰謀?
現在你可以檢查你的 Facebook 信息是否與 Cambridge Analytica 共享
你是否對可摺疊iPhone感興趣
vivo要逆襲國產iPhoneX?關鍵在於是否「高價低配」
Sentinel Wrap使用DNA來顯示食物是否已經變質
DeepMind高管回答:Alpha zero 的強化學習是否真的不要訓練數據?
如此前衛的設計你是否會買帳?Vetements x Reebok
微軟推WindowsAnalytics工具 看是否受CPU漏洞影響