Python을 사용하여 파일의 사용 여부를 판단하는 방법 튜토리얼

오늘 어떤 학우가 os모듈의access()로 파일이 점용되었는지 판단할 수 있느냐고 물었다.이것은 직감적으로 통하지 않습니다.access () 가 되돌아오는 것은 파일의 읽기와 쓰기 속성이기 때문입니다.그걸 확인하기 위해 간단히 테스트를 해봤어요.

>>> 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) #  
True
>>> fp = open(fn, 'a+') #  
>>> 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) #  
True
>>> fp.close()
보이다access () 는 파일 읽기와 쓰기 속성을 되돌려줍니다. 파일이 점용되었는지 여부와 반 푼의 관계가 없습니다.
나중에 그룹에서 어떤 학우들은try로 오픈 파일을 시도해 봐도 괜찮다고 건의했다. 만약 성공한다면 파일이 점용되지 않았고, 이상을 던지면 파일이 점용되었다는 뜻이다.과연 그럴까?코드로 검증하는 게 낫겠다.

>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()
그 결과 같은 파일을 쓰는 방식으로 여러 번 열었지만 시스템에서 이상이 발견되지 않았다.왜 이러지?그 이유는 파일이 열리는 것과 파일이 차지하는 것이 완전히 다른 문제이기 때문이다.상기 테스트를 할 때'w'방식을 사용하지 마십시오. 그렇지 않으면 파일 내용이 비워질 것입니다.
그렇다면 도대체 파이썬으로 파일이 점용되었는지 아닌지를 어떻게 판단해야 합니까?이 문제는 운영체제 차원으로 돌아가서 해결해야 한다. 즉, 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
간단하게 검증했어, 함수 is_used () 는 기본적으로 사용할 수 있습니다.
Python을 사용하여 하나의 파일이 점용되었는지 판단하는 글에 대해 소개합니다. 더 많은 Python 판단 파일이 점용되었는지에 대한 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기