5.12 測(cè)試文件是否存在

2018-02-24 15:26 更新

問(wèn)題

你想測(cè)試一個(gè)文件或目錄是否存在。

解決方案

使用 os.path 模塊來(lái)測(cè)試一個(gè)文件或目錄是否存在。比如:

>>> import os
>>> os.path.exists('/etc/passwd')
True
>>> os.path.exists('/tmp/spam')
False
>>>

你還能進(jìn)一步測(cè)試這個(gè)文件時(shí)什么類型的。在下面這些測(cè)試中,如果測(cè)試的文件不存在的時(shí)候,結(jié)果都會(huì)返回False:

>>> # Is a regular file
>>> os.path.isfile('/etc/passwd')
True

>>> # Is a directory
>>> os.path.isdir('/etc/passwd')
False

>>> # Is a symbolic link
>>> os.path.islink('/usr/local/bin/python3')
True

>>> # Get the file linked to
>>> os.path.realpath('/usr/local/bin/python3')
'/usr/local/bin/python3.3'
>>>

如果你還想獲取元數(shù)據(jù)(比如文件大小或者是修改日期),也可以使用 os.path 模塊來(lái)解決:

>>> os.path.getsize('/etc/passwd')
3669
>>> os.path.getmtime('/etc/passwd')
1272478234.0
>>> import time
>>> time.ctime(os.path.getmtime('/etc/passwd'))
'Wed Apr 28 13:10:34 2010'
>>>

討論

使用 os.path 來(lái)進(jìn)行文件測(cè)試是很簡(jiǎn)單的。在寫(xiě)這些腳本時(shí),可能唯一需要注意的就是你需要考慮文件權(quán)限的問(wèn)題,特別是在獲取元數(shù)據(jù)時(shí)候。比如:

>>> os.path.getsize('/Users/guido/Desktop/foo.txt')
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python3.3/genericpath.py", line 49, in getsize
        return os.stat(filename).st_size
PermissionError: [Errno 13] Permission denied: '/Users/guido/Desktop/foo.txt'
>>>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)