파이썬에서 파일 저장 중 PermissionError가 나면 실패한 경로와 실행 계정을 확인하고, 대상 파일의 잠금과 쓰기 권한을 차례로 살펴보세요. 파일 대신 폴더를 지정했거나 부모 폴더가 없는 경우에는 다른 예외가 나타날 수도 있습니다. 예외 이름만으로 잠금과 권한 부족을 확정할 수는 없으므로, 확인 결과에 따라 파일을 닫을지, 저장 위치를 바꿀지, 권한을 요청하거나 코드를 고칠지 선택합니다.
오류 이름과 실제 저장 경로부터 확인하기
Python 예외 문서에 따르면 PermissionError는 필요한 접근 권한 없이 작업할 때 발생하는 OSError의 하위 예외입니다. FileNotFoundError는 요청한 파일이나 디렉터리가 없을 때, IsADirectoryError는 파일에 할 작업을 디렉터리에 요청했을 때 발생합니다. 운영체제와 상황에 따라 나타나는 예외가 다를 수 있으니, 저장에 실패한 줄의 전체 오류 메시지와 경로를 함께 확인하세요.
아래 경로는 설명을 위한 예시입니다. 실제 저장 코드에서 사용하는 경로로 바꾸어 확인하세요. 이 코드는 저장을 시도하거나 파일 내용을 변경하지 않습니다.
from pathlib import Path
output_path = Path("결과/summary.csv") # 예시 경로
print("입력한 경로:", output_path)
print("절대 경로:", output_path.absolute())
print("대상이 폴더인가:", output_path.is_dir())
print("부모 폴더가 존재하는가:", output_path.parent.exists())
print("부모가 폴더인가:", output_path.parent.is_dir())
예약 실행에서만 실패한다면 이 절대 경로와 대화형 실행에서 확인한 경로를 비교해 보세요. 상대 경로는 실행 위치에 따라 다른 곳을 가리킬 수 있습니다. 실제 대상이 폴더라면 파일명까지 포함하도록 경로를 고치고, 부모 폴더가 없다면 올바른 위치인지 확인한 후 필요한 폴더를 준비합니다. 경로 확인 결과만으로 쓰기 권한이 있다고 판단하지는 마세요.
권한 문제와 Excel 잠금을 어떻게 나눌까요?
대상 경로가 맞고 Excel 파일이 열려 있다면 변경 사항을 먼저 저장한 후 해당 파일을 닫고 다시 시도해 보세요. Microsoft의 Excel 잠금 안내에 따르면 다른 사용자뿐 아니라 같은 사용자의 다른 장치나 정상 종료되지 않은 이전 Excel 인스턴스 때문에 파일이 잠길 수 있습니다. 공유 파일이라면 다른 사용자에게 편집을 마쳤는지 확인하고, 보기 전용 권한만 있다면 편집 권한을 요청합니다.
파일을 닫은 뒤 저장이 성공하면 잠금이 관련되었을 가능성을 살펴볼 수 있습니다. 다만 Excel의 잠금 안내가 모든 운영체제의 Python 예외를 규정하는 것은 아닙니다. 닫은 뒤에도 실패하면 파일의 읽기 전용 상태와 실행 계정의 대상 파일 수정 권한, 부모 폴더에 파일을 만들 권한을 확인하세요. 새 파일 생성과 기존 파일 수정은 확인해야 할 대상이 다릅니다. 권한이 없는 위치라면 허용된 출력 폴더를 선택하거나 담당자에게 필요한 권한을 요청합니다. 무작정 관리자 권한으로 재실행할 필요는 없습니다.
Windows에서 이름을 조립한다면 Microsoft의 파일 이름 규칙도 확인하세요. 파일이나 폴더 이름에는 예약 문자를 쓸 수 없고 CON, PRN 같은 예약 이름과 이름 끝의 공백·마침표에도 제약이 있습니다. 이런 이름 문제를 PermissionError의 확정 원인으로 취급하기보다 실제 오류 메시지와 함께 확인해야 합니다.
데이터가 중요하면 재시도 전에 출력 방식을 확인하기
Python 입출력 문서에 따르면 w 모드로 기존 파일을 열면 내용이 잘립니다. 따라서 저장이 실패했다는 메시지만 보고 기존 결과가 그대로 남아 있다고 가정하지 마세요. 중요한 결과라면 재시도 전에 현재 파일의 상태를 확인하고, 필요한 데이터를 보존한 뒤 별도의 출력 파일을 지정해 처리하는 편이 안전합니다. 새 파일에 저장하더라도 결과 내용을 확인한 후 기존 파일을 교체할지 결정하세요.
코드에서 직접 연 파일은 with 블록을 사용하면 종료 지점을 분명히 할 수 있습니다. Python 문서는 with나 close()를 이용해 파일을 닫도록 안내합니다. 읽기와 쓰기가 이어지는 코드라면 파일을 여는 부분과 사용이 끝나는 부분을 확인하고, 외부 프로그램의 잠금이나 운영체제 권한은 별도로 점검하세요.
확인 결과에 따른 다음 조치
- 경로가 폴더이거나 부모 폴더가 없다면 파일명과 출력 위치를 수정합니다.
- Excel에서 파일이 열려 있다면 변경 사항을 보존하고 닫은 뒤 다시 시도합니다. 공유 중이면 다른 사용자와 편집 상태를 확인합니다.
- 실행 계정에 필요한 권한이 없다면 허용된 위치를 사용하거나 권한을 요청합니다.
- 코드에서 연 파일의 종료 시점이 불분명하다면
with또는close()를 사용하도록 고칩니다. - 기존 결과가 중요하다면 상태를 확인하고 별도 출력에 저장한 결과를 검토한 뒤 교체 여부를 결정합니다.
그래도 해결되지 않으면 전체 오류 메시지, 실제 절대 경로, 실행 계정과 파일이 있는 위치를 함께 기록해 환경 담당자에게 전달하세요. 경로와 메시지에 민감한 정보가 포함되어 있다면 공유 전에 필요한 범위만 남기면 됩니다.