파일이 Python에서 열려 있는지 확인
내 앱에서 Excel 파일에 씁니다. 작성 후 사용자는 파일을 열어 볼 수 있습니다. 그러나 사용자가 더 이상 쓰기 전에 파일을 닫는 것을 잊었다면 경고 메시지가 나타나야 합니다. 따라서 쓰기 프로세스 전에 이 파일이 열려 있는지 확인하는 방법이 필요합니다. 이 작업을 수행할 파이썬 코드를 제공해 주시겠습니까?
파일에 쓰고 있다고 가정하고 파일을 닫고(사용자가 Excel에서 열 수 있도록) 추가/쓰기 작업을 위해 파일을 다시 열기 전에 파일이 아직 없는지 확인하려고 합니다. 엑셀에서 열어?
다음과 같이 해야 합니다.
try:
myfile = open("myfile.csv", "r+") # or "a+", whatever you need
except IOError:
print "Could not open file! Please close Excel!"
with myfile:
do_stuff()
현재 프로세스만 신경쓰면 쉬운 방법은 파일 객체 속성 "closed"를 사용하는 것입니다.
f = open('file.py')
if f.closed:
print 'file is closed'
파일이 다른 프로세스에서 열려 있는지 감지하지 않습니다!
출처: http://docs.python.org/2.4/lib/bltin-file-objects.html
Windows 10의 Excel에서 이 특정 문제를 처리할 때 제공된 다른 예제 중 어느 것도 저에게 적합하지 않습니다. 제가 생각할 수 있는 유일한 다른 옵션은 파일이 포함된 파일이나 디렉토리의 이름을 임시로 변경한 다음 다시 이름을 바꾸는 것입니다.
import os
try:
os.rename('file.xls', 'tempfile.xls')
os.rename('tempfile.xls', 'file.xls')
except OSError:
print('File is still open.')
open("path")을 파일로 사용할 수 있습니다: 자동으로 닫히지 않으면 다른 프로세스에서 열려 있는 경우 Tims 예제에서처럼 시도할 수 있습니다.
try:
with open("path", "r") as file:#or just open
#Code here
except IOError:
#raise error or print
사용
try:
with open("path", "r") as file:#or just open
파일을 다른 프로세스에서 열 때(즉, 사용자가 수동으로 열 때) 문제가 발생할 수 있습니다. win32com 라이브러리를 사용하여 문제를 해결할 수 있습니다. 아래 코드는 Excel 파일이 열려 있는지 확인하고 특정 파일의 이름과 일치하는 파일이 없으면 새 파일을 엽니다.
import win32com.client as win32
xl = win32.gencache.EnsureDispatch('Excel.Application')
my_workbook = "wb_name.xls"
xlPath="my_wb_path//" + my_workbook
if xl.Workbooks.Count > 0:
# if none of opened workbooks matches the name, openes my_workbook
if not any(i.Name == my_workbook for i in xl.Workbooks):
xl.Workbooks.Open(Filename=xlPath)
xl.Visible = True
#no workbooks found, opening
else:
xl.Workbooks.Open(Filename=xlPath)
xl.Visible = True
'xl.Visible = True is not necessary, used just for convenience'
이것이 도움이 되기를 바랍니다.
ReferenceURL : https://stackoverflow.com/questions/6825994/check-if-a-file-is-open-in-python
'IT이야기' 카테고리의 다른 글
메모장 ++ 파일 필터에서 찾기 EXCLUDE (0) | 2021.09.21 |
---|---|
Apache http 클라이언트 또는 URLConnection (0) | 2021.09.21 |
추상은 아니지만 재정의해야 하는 메서드를 만드는 방법 (0) | 2021.09.18 |
JavaScript 객체를 JSON 문자열로 직렬화 (0) | 2021.09.18 |
면도기 보기 내부에서 내 모델이 유효한지 어떻게 확인할 수 있습니까? (0) | 2021.09.18 |