본문 바로가기
업무 자동화(RPA)/Python | 웹 크롤링(Web Crawling)

[Python] PermissionError: [Errno 13] Permission denied 오류 1분만에 해결 방법

by 카랑현석 2024. 2. 1.

문제 상황

PermissionError: [Errno 13] Permission denied: 'C:\\Users\\johnl\\Desktop\\windly_program\\result'

위 오류 메시지와 같이 "PermissionError: [Errno 13] Permission denied" 문구가 포함된 오류에 속한다.
필자의 경우에는 크롤링 프로그램을 만들다가 해당 오류가 발생하였다.

문제 원인

- 저장할 파일의 경로명을 잘못 지정했다.

- 경로를 폴더로 지정하였다.

- 파일을 읽거나 쓸 수 있는 권한이 없다.

문제 해결

- 저장할 파일의 경로명을 잘못 지정한 경우

 

1. 경로명을 지정할 때 'C:\Users\hyeonseok\Appdata\crawling.xlsx' 이런 식으로 지정하면 안된다. \은 컴퓨터가 알아들을 때 \ 로 알아듣지 않는다. 그래서 다음과 같이 수정해주어야 한다.

 수정1) 'C:\\Users\\hyeonseok\\Appdata\\crawling.xlsx' 

 수정2) r'C:\Users\hyeonseok\Appdata\crawling.xlsx'

위와 같이 지정하면 컴퓨터는 이제서야 우리가 의도한대로 C:\Users\hyeonseok\Appdata 라고 알아 듣는다.

 

2. 자신의 경로명을 직접 파일 탐색기를 통해 이동하면서 찾아본다. 경로명 자체가 틀리지 않았는지 확인해본다.

 

- 경로를 폴더로 지정한 경우

경로명을 지정할 때 'C:\Users' 이런 식으로 최종 경로가 폴더가 되는 곳으로 지정하는 경우가 있는데 이런 경우 해당 오류가 발생하게 된다.

반드시 마지막 최종 경로는 폴더가 아닌 파일이 되어야 한다.

 

만약 C:\Users에 crawling.xlsx 파일을 저장하고 싶다면, 다음과 같이 경로명을 지정해야 한다.

r'C:\Users\crawling.xlsx'

 

필자의 경우 크롤링한 데이터를 엑셀에 넣고 저장할 때 경로를 폴더로 지정하는 오류 때문에 애를 먹었었다.

#excel_save_path = r'C:\outsourcing\6.windly_crawling' # ( 비정상 경로 - 경로를 폴더로 지정 )
excel_save_path = r'C:\outsourcing\6.windly_crawling\windly.xlsx' # ( 정상 경로 )
wb.save(excel_save_path)

 

- 읽거나 써야 하는 파일을 열고 있는 경우

예를 들어, 

excel_save_path = r'C:\outsourcing\6.windly_crawling\windly.xlsx' # ( 정상 경로 )

위 코드에서 C:\outsourcing\6.windly_crawling\windly.xlsx

즉, 저 엑셀 파일을 열은 상태로 실행했기 때문에 읽거나 쓸 수 없는 문제가 발생한다.

이 경우 실행하고 있는 엑셀 파일을 모두 끄면 해결된다. 

 

- 파일을 읽거나 쓸 수 없는 경우

 

필자는 이 오류가 나온 경우 경로명을 잘못 지정했거나 경로를 폴더로 지정한 경우가 100%였다.

파일 권한을 특별히 건드리지 않는 한 파일을 읽거나 쓸 수 없는 경우는 없었다.

 

그래도 파일의 권한에 문제가 있을 수 있으므로 다음 코드로 체크해본다.

import os
print(os.access(경로명, os.F_OK)) # 파일 자체가 존재하는지 체크 (정상 : True)
print(os.access(경로명, os.R_OK)) # 읽기 권한이 있는지 체크 (정상 : True)
print(os.access(경로명, os.W_OK)) # 쓰기 권한이 있는지 체크 (정상 : True)
print(os.access(경로명, os.X_OK)) # 실행 권한이 있는지 체크 (정상 : True)

 

만약 경로명을 틀리게 작성하지 않았는데 저 코드로 체크했을 때 False가 나온다면 파일 권한을 의심해봐야 한다.