프로그래밍/파이썬 공부

코드에는 문제가 없는데 계속 OSError: [Errno 9] Bad file descriptor가 날 때

방구석의 개굴이 2024. 11. 3. 17:04

[Python 파일 입출력 오류 해결 노트]

문제 요약

  1. Python으로 파일을 열고 데이터를 쓰려 할 때 OSError: [Errno 9] Bad file descriptor 오류가 발생.
  2. 파일 경로로 OneDrive 경로를 사용했을 때 발생.

해결 과정

  1. 코드 실행 환경 재시작
    • Jupyter Notebook 또는 VS Code 사용 시, 커널을 완전히 재시작하고 코드를 다시 처음부터 실행.
    • 이 단계에서 오류가 해결되지 않는다면 다음 단계로 진행.
  2. 작업 디렉터리 확인 및 경로 설정
    • os.getcwd()를 사용하여 현재 작업 디렉터리가 원하는 폴더와 일치하는지 확인.
    • 절대 경로를 사용해 C:/Users/내이름/... 등으로 파일 위치를 명확하게 지정.
  3. OneDrive 폴더 경로 문제 확인
    • OneDrive와 같은 클라우드 동기화 폴더에서는 파일을 사용하는 중이나 동기화 상태에 따라 접근 제한이 걸릴 수 있음.
    • 이 경우, C 드라이브 같은 로컬 디렉터리로 경로를 변경해 해결.
  4. 파일 열기 시 with 구문 사용 권장
    • 파일을 열고 닫는 과정에서 오류 발생 가능성을 줄이기 위해 with open(...) 구문을 사용하는 것이 좋음.
  5. 백업 계획 수립
    • OneDrive 외의 폴더로 파일을 이동한 경우, 정기적인 물리적 백업(예: USB 드라이브, 외장 하드) 또는 클라우드 백업을 고려.

최종 코드 예시

python
코드 복사
import random

# 한글 문자 리스트 생성
hanguls = list("가나다라마바사아자차카타파하")

# 로컬 디렉터리에 파일 저장
with open("C:/Users/내이름/Documents/연습폴더/data.txt", "w") as file:
    file.write("name, height, weight\\n")
    for i in range(1000):
        weight = random.randrange(40, 120)
        height = random.randrange(150, 200)
        name = random.choice(hanguls) + random.choice(hanguls)
        file.write(f"{name}, {height}, {weight}\\n")

print("파일 생성 완료")

추가 참고사항

  • OneDrive 설정 관리: 클라우드와 파일 동기화 시 "파일 온디맨드" 기능 비활성화 검토.
  • VS Code 관리자 모드 사용: 파일 권한 문제 발생 시 VS Code를 관리자 권한으로 실행하면 도움이 될 수 있음.

오랜만에 혼공파 책을 잡아서 다시 공부하고 있다. 4,5챕터가 고비였는데 어찌어찌 넘어가는 중... (나름 R로 체력을 좀 키워와서 그런가...)
근데 너무 코린이라 그냥 매순간 '이게 웨않되'이러고 있다 ^^
파일 날아갈까봐 문서에 있는 대부분의 파일을 one drive 로 연동해놨는데 코딩 연습할 때는 짱 별로임 ㅎㅎ
결국 C드라이브에서 연습하는게 속 편한듯
옛날에(?) Kernel 오류 (ModuleNotFoundError) 로도 난리치다가 걍 base로 설정 안 해서 그랬던 거 알고 허무했던 적도 있다..

그리고 요즘 AI가 노트정리도 다 해주니까 너무 편하다. 손가락 근육도 퇴화할 것 같다.

아 맞다 그리고 R 에서는 getwd()인데 python에서는 get**c**wd()였던 것도 나의 뻘짓에 약간 기여했다,,,