Python用access判斷文件是否被占用的實(shí)例方法
有的小伙伴想知道用access()函數(shù)可以判斷一個(gè)文件被占用嗎?理論上來(lái)說(shuō)是不行的,access()返回的是文件的讀寫屬性。為了讓小伙伴們信服,小編進(jì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) # 文件是否可寫 True >>> os.access(fn, os.X_OK) # 文件是否可執(zhí)行 True >>> fp = open(fn, 'a+') # 以追加寫的方式打開(kāi)文件 >>> 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()
可見(jiàn),os.access()返回的是文件讀寫屬性,與文件是否被占用沒(méi)有半毛錢關(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è)文件以寫的方式打開(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用access判斷文件是否被占用的實(shí)例方法的文章就介紹到這了,更多相關(guān)Python怎樣用access判斷文件是否被占用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python表格處理模塊xlrd在Anaconda中的安裝方法
本文介紹在Anaconda環(huán)境下,安裝Python讀取.xls格式表格文件的庫(kù)xlrd的方法,xlrd是一個(gè)用于讀取Excel文件的Python庫(kù),本文介紹了xlrd庫(kù)的一些主要特點(diǎn)和功能,感興趣的朋友一起看看吧2024-04-04
Python Pillow 圖像處理庫(kù)詳解(常用Pillow函數(shù)及其參數(shù))
Pillow,原名PIL(Python Imaging Library),是一個(gè)功能強(qiáng)大的Python圖像處理庫(kù),支持多種格式,提供豐富的圖像操作功能,如旋轉(zhuǎn)、縮放、顏色轉(zhuǎn)換等,以及易于使用的API,Pillow支持廣泛的圖像文件格式,并提供圖像過(guò)濾、繪制等功能2024-09-09
Python定時(shí)任務(wù)實(shí)現(xiàn)方案
這篇文章主要介紹了Python定時(shí)任務(wù)實(shí)現(xiàn)的方案,定時(shí)執(zhí)行的任務(wù),可以是一段bash命令,也可以是一個(gè)腳本文件。通常用于我們需要在特定時(shí)刻做事情,下面來(lái)看看文章詳細(xì)內(nèi)容,需要的朋友可以參考一下2021-11-11
解析numpy中的iscomplex方法及實(shí)際應(yīng)用
NumPy 的 iscomplex 方法為檢查數(shù)組中的元素是否為復(fù)數(shù)提供了一種高效且易于使用的接口,本文介紹了 iscomplex 方法的基本概念、使用方法以及它在解決實(shí)際問(wèn)題中的應(yīng)用,需要的朋友可以參考下2024-06-06
基于Python實(shí)現(xiàn)地標(biāo)景點(diǎn)識(shí)別功能
地標(biāo)景點(diǎn)識(shí)別是一種基于計(jì)算機(jī)視覺(jué)技術(shù)的應(yīng)用,旨在通過(guò)對(duì)圖像進(jìn)行分析和處理,自動(dòng)識(shí)別出圖片中的地標(biāo)景點(diǎn),本文將介紹地標(biāo)景點(diǎn)識(shí)別的背景和原理,并使用Python編程語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的地標(biāo)景點(diǎn)識(shí)別系統(tǒng),感興趣的朋友可以參考下2024-01-01
Python 機(jī)器學(xué)習(xí)第一章環(huán)境配置圖解流程
機(jī)器學(xué)習(xí)是一類算法的總稱,這些算法企圖從大量歷史數(shù)據(jù)中挖掘出其中隱含的規(guī)律,并用于預(yù)測(cè)或者分類,更具體的說(shuō),機(jī)器學(xué)習(xí)可以看作是尋找一個(gè)函數(shù),輸入是樣本數(shù)據(jù),輸出是期望的結(jié)果,只是這個(gè)函數(shù)過(guò)于復(fù)雜,以至于不太方便形式化表達(dá)2021-11-11
Python自動(dòng)化運(yùn)維和部署項(xiàng)目工具Fabric使用實(shí)例
Fabric是一個(gè)Python庫(kù),只要目標(biāo)機(jī)器支持ssh訪問(wèn),就可以借助fabric來(lái)進(jìn)行遠(yuǎn)程操作(如在host1上對(duì)host2遠(yuǎn)程運(yùn)行shell命令),顯然,由于fabric是個(gè)Python package,故其它Python package都可以被import到fabric特有的fabfile.py腳本中2016-09-09

