Python判斷對象是否爲文件對象(file object)的三種方法

文件操做是開發中常常遇到的場景,那麼如何判斷一個對象是文件對象呢?下面咱們總結了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
相關文章
相關標籤/搜索