使用Python判斷一個文件是否被占用的方法教程
今天有同學(xué)問,用os模塊的access()能否判斷一個文件是否被占用?直覺上,這是行不通的,因?yàn)閍ccess()返回的是文件的讀寫屬性。為了確認(rèn)這一點(diǎn),我簡單測試了一下。
>>> import os >>> fn = r'D:\temp\csdn\t.py' # 測試用的文件 >>> os.access(fn, os.F_OK) # 文件是否存在 True >>> os.access(fn, os.R_OK) # 文件是否可讀 True >>> os.access(fn, os.W_OK) # 文件是否可寫 True >>> os.access(fn, os.X_OK) # 文件是否可執(zhí)行 True >>> fp = open(fn, 'a+') # 以追加寫的方式打開文件 >>> os.access(fn, os.F_OK) # 文件當(dāng)然還在 True >>> os.access(fn, os.R_OK) # 文件依然可讀 True >>> os.access(fn, os.W_OK) # 文件依然可寫 True >>> os.access(fn, os.X_OK) # 文件依然執(zhí)行 True >>> fp.close()
可見,os.access()返回的是文件讀寫屬性,與文件是否被占用沒有半毛錢關(guān)系。
后來,群里有同學(xué)建議說,不妨用try嘗試著open文件,如果成功,表示文件沒有被占用,如果拋出異常,則表示文件被占用。果真如此嗎?還是用代碼驗(yàn)證一下吧。
>>> fp1 = open(fn, 'a+') >>> fp2 = open(fn, 'a+') >>> fp1.close() >>> fp2.close()
結(jié)果表明,對同一個文件以寫的方式打開多次,系統(tǒng)并沒有拋出異常。為什么會這樣呢?究其原因,是因?yàn)槲募淮蜷_和文件被占用是完全兩個不同的問題。順便提醒一下,做上面的測試時,不要使用'w'的方式,否則文件內(nèi)容會被清空。
那么,究竟應(yīng)該如何用Python判斷一個文件是否被占用呢?這個問題還是要回歸到操作系統(tǒng)層面來解決,也就是依賴win32api模塊。
>>> import win32file >>> def is_used(file_name): try: vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None) return int(vHandle) == win32file.INVALID_HANDLE_VALUE except: return True finally: try: win32file.CloseHandle(vHandle) except: pass >>> fn = r'D:\temp\csdn\t.py' >>> is_used(fn) False >>> fp = open(fn, 'a+') >>> is_used(fn) True >>> fp.close() >>> is_used(fn) False
簡單驗(yàn)證了一下,函數(shù)is_used()基本可用。
到此這篇關(guān)于使用Python判斷一個文件是否被占用的文章就介紹到這了,更多相關(guān)Python判斷文件被占用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用whisper實(shí)現(xiàn)語音識別(ASR)的示例代碼
Whisper是OpenAI的一個強(qiáng)大的語音識別庫,支持離線的語音識別,本文主要介紹了Python使用whisper實(shí)現(xiàn)語音識別(ASR)的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-03-03
找不到Anaconda prompt終端的原因分析及解決方案
因?yàn)閍naconda還沒有初始化,在安裝anaconda的過程中,有一行是否要添加anaconda到菜單目錄中,由于沒有勾選,導(dǎo)致沒有菜單部分的初始化,故找不到,這篇文章主要介紹了找不到Anaconda prompt終端的原因分析及解決方案,需要的朋友可以參考下2025-03-03
Django實(shí)現(xiàn)自定義路由轉(zhuǎn)換器
有時候上面的內(nèi)置的url轉(zhuǎn)換器并不能滿足我們的需求,因此django給我們提供了一個接口可以讓我們自己定義自己的url轉(zhuǎn)換器,那么如何實(shí)現(xiàn),本文就來介紹一下2021-05-05
python代碼實(shí)現(xiàn)煙花實(shí)例
這篇文章主要給大家分享了python煙花詳細(xì)的代碼,文章主要以python煙花的代碼展開全文,所以解說會比較少,代碼較多。喜歡的小伙伴可以參考一下,希望對你有所幫助2021-12-12
python實(shí)現(xiàn)掃描日志關(guān)鍵字的示例
下面小編就為大家分享一篇python實(shí)現(xiàn)掃描日志關(guān)鍵字的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python sqlite3事務(wù)處理方法實(shí)例分析
這篇文章主要介紹了Python sqlite3事務(wù)處理方法,結(jié)合具體實(shí)例形式分析了Python針對sqlite3事務(wù)處理的操作技巧,代碼中包含詳盡的注釋,需要的朋友可以參考下2017-06-06

