文件操做是開發中常常遇到的場景,那麼如何判斷一個對象是文件對象呢?下面咱們總結了3種常見的方法。
方法1:比較類型
第一種方法,就是判斷對象的type是否爲file
pythonpython
fp = open(r"/tmp/pythontab.com") type(fp) <type 'file'> type(fp) == file True 注意:該方法對於從file繼承而來的子類不適用,看下面的實例 class fileDetect(file): pass # 中間代碼無所謂,直接跳過不處理 fp2 = fileDetect(r"/tmp/pythontab.com") fileType = type(fp2) print(fileType) 結果: <class '__main__.fileDetect'> 方法2:isinstance方法 要判斷一個對象是否爲文件對象(file object),能夠直接isinstance()判斷。 以下代碼中,open獲得的對象fp類型爲file,固然是file的實例,而filename類型爲str,天然不是file的實例 isinstance(fp, file) True isinstance(fp2, file) True filename = r"/tmp/pythontab.com" type(filename) <type 'str'> isinstance(filename, file) False 方法3:推測法 在python中,類型並無那麼重要,重要的是「接口」。若是他走路像鴨子,咱們就認爲他是鴨子(起碼在走路和叫聲這樣的行爲上)。 按照這個思想咱們就有了第三種判斷方法:判斷一個對象是否有可調用的read,write,close方法(屬性)。 參看: def isfile(f): """ Check if object 'f' is readable file-like that it has callable attributes 'read' , 'write' and 'close' """ try: if isinstance(getattr(f, "read"), collections.Callable) \ and isinstance(getattr(f, "write"), collections.Callable) \ and isinstance(getattr(f, "close"), collections.Callable): return True except AttributeError: pass return False