使用Python判斷一個(gè)文件是否被占用的方法教程
今天有同學(xué)問(wèn),用os模塊的access()能否判斷一個(gè)文件是否被占用?直覺(jué)上,這是行不通的,因?yàn)閍ccess()返回的是文件的讀寫(xiě)屬性。為了確認(rèn)這一點(diǎn),我簡(jiǎn)單測(cè)試了一下。
>>> import os >>> fn = r'D:\temp\csdn\t.py' # 測(cè)試用的文件 >>> os.access(fn, os.F_OK) # 文件是否存在 True >>> os.access(fn, os.R_OK) # 文件是否可讀 True >>> os.access(fn, os.W_OK) # 文件是否可寫(xiě) True >>> os.access(fn, os.X_OK) # 文件是否可執(zhí)行 True >>> fp = open(fn, 'a+') # 以追加寫(xiě)的方式打開(kāi)文件 >>> os.access(fn, os.F_OK) # 文件當(dāng)然還在 True >>> os.access(fn, os.R_OK) # 文件依然可讀 True >>> os.access(fn, os.W_OK) # 文件依然可寫(xiě) True >>> os.access(fn, os.X_OK) # 文件依然執(zhí)行 True >>> fp.close()
可見(jiàn),os.access()返回的是文件讀寫(xiě)屬性,與文件是否被占用沒(méi)有半毛錢(qián)關(guān)系。
后來(lái),群里有同學(xué)建議說(shuō),不妨用try嘗試著open文件,如果成功,表示文件沒(méi)有被占用,如果拋出異常,則表示文件被占用。果真如此嗎?還是用代碼驗(yàn)證一下吧。
>>> fp1 = open(fn, 'a+') >>> fp2 = open(fn, 'a+') >>> fp1.close() >>> fp2.close()
結(jié)果表明,對(duì)同一個(gè)文件以寫(xiě)的方式打開(kāi)多次,系統(tǒng)并沒(méi)有拋出異常。為什么會(huì)這樣呢?究其原因,是因?yàn)槲募淮蜷_(kāi)和文件被占用是完全兩個(gè)不同的問(wèn)題。順便提醒一下,做上面的測(cè)試時(shí),不要使用'w'的方式,否則文件內(nèi)容會(huì)被清空。
那么,究竟應(yīng)該如何用Python判斷一個(gè)文件是否被占用呢?這個(gè)問(wèn)題還是要回歸到操作系統(tǒng)層面來(lái)解決,也就是依賴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
簡(jiǎn)單驗(yàn)證了一下,函數(shù)is_used()基本可用。
到此這篇關(guān)于使用Python判斷一個(gè)文件是否被占用的文章就介紹到這了,更多相關(guān)Python判斷文件被占用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Numpy擴(kuò)充矩陣維度(np.expand_dims, np.newaxis)和刪除維度(np.squeeze)的方
這篇文章主要介紹了詳解Numpy擴(kuò)充矩陣維度(np.expand_dims, np.newaxis)和刪除維度(np.squeeze)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python手繪可視化工具cutecharts使用實(shí)例
這篇文章主要介紹了Python手繪可視化工具cutecharts使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python實(shí)現(xiàn)鍵盤(pán)控制鼠標(biāo)移動(dòng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)鍵盤(pán)控制鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式
這篇文章主要介紹了python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python實(shí)現(xiàn)號(hào)碼歸屬地查詢功能
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)對(duì)手機(jī)號(hào)碼進(jìn)行地域分析并查詢歸屬地的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12Python單元測(cè)試unittest模塊使用終極指南
本文將詳細(xì)介紹unittest模塊的各個(gè)方面,包括測(cè)試用例、斷言、測(cè)試套件、setUp和tearDown方法、跳過(guò)和期望異常、測(cè)試覆蓋率、持續(xù)集成等內(nèi)容,我們將提供豐富的示例代碼,以便讀者更好地理解如何使用unittest進(jìn)行單元測(cè)試2023-12-12python?pygame實(shí)現(xiàn)打磚塊游戲
這篇文章主要為大家詳細(xì)介紹了python?pygame實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05