
📝 파이썬 완벽 가이드: 빈 노트에 글씨 쓰기 ('w' 모드와 with의 마법)
이전 시간에는 파일 안의 글자를 읽어오기 위해 'r' (Read) 모드를 사용했습니다. 반대로 파이썬을 이용해 파일에 새로운 글씨를 적어 넣으려면 'w' (Write) 모드를 사용해야 합니다.
📖 1. 'w' (Write) 모드의 두 가지 얼굴
'w' 모드로 파일을 열라고 명령했을 때, 파이썬은 파일의 존재 여부에 따라 아주 똑똑하게(때로는 무섭게) 행동합니다.
- 파일이 없을 때 (오늘의 정답!): "어? 파일이 없네? 그럼 내가 새로 빈 노트를 하나 만들어줄게!" 라며 파일을 방금 새로 생성해 줍니다.
- 파일이 이미 있을 때 (주의!): "어? 파일이 있네? 그럼 새로 써야 하니까 원래 있던 내용은 다 지워버려야지!" 라며 싹 지우고 백지로 만들어 버립니다. (데이터가 날아갈 수 있으니 주의해야 해요!)
🚪 2. 코드의 마법, 자동문 with open(...)
퀴즈 화면의 코드를 자세히 보시면 저번 시간에 배웠던 f = open(...) 형태가 아니라 앞에 with 라는 단어가 붙어 있습니다. 이것은 파이썬 개발자들이 가장 사랑하는 '자동문' 문법입니다.
저번 시간에 파일 문을 열었으면 메모리가 새지 않게 반드시 f.close()로 문을 닫아주어야 한다고 말씀드렸죠? 하지만 들여쓰기가 된 with 블록 안에서 코드를 작성하면, 작업이 끝나는 순간 파이썬이 알아서 close()를 호출해 문을 닫아버립니다. 깜빡하고 문을 안 닫고 나가는 실수를 원천 차단해 주는 아주 고마운 기능입니다!
💻 3. 코드로 보는 완벽한 흐름
# [1] 'demofile3.txt'를 쓰기('w') 모드로 엽니다. (파일이 없으면 새로 만듭니다!)
# 열린 파일의 손잡이 이름은 'f'라고 부르기로 합니다 (as f)
with open('demofile3.txt', 'w') as f:
# [2] f.write() 함수를 이용해 파일 안에 글씨를 적어 넣습니다.
f.write("안녕하세요! 파이썬이 방금 자동으로 이 글씨를 썼습니다.\n")
f.write("정말 신기하죠?")
# [3] 들여쓰기가 끝나는 이 지점에서, 파이썬이 알아서 f.close()를 실행해 문을 닫습니다!
# (우리가 따로 close를 적어줄 필요가 없습니다.)
이렇게 f.write() 함수를 사용하면 컴퓨터 안에 있는 텍스트 파일, 엑셀 파일(csv) 등에 여러분이 원하는 데이터를 무한정 자동으로 쏟아부을 수 있습니다!
📝 4. 핵심 한 줄 총정리 요약
"with open('파일명', 'w') as f: 를 사용하면, 파일이 없을 땐 새로 만들어서 안전하게 글을 쓸 수 있고, 끝날 때 알아서 파일 문까지 닫아준다!"

🛡️ 파이썬 완벽 가이드: 덮어쓰기 철벽 방어! 특별한 파일 생성 모드 'x'
파이썬으로 중요한 관광 데이터나 고객 정보를 다루다 보면, 실수로 기존에 있던 소중한 파일을 덮어써서 날려버리는 대참사(?)가 일어날 수 있습니다. 이때 우리의 데이터를 안전하게 지켜주는 방패가 바로 'x' (Exclusive Creation) 모드입니다.
📖 1. 'x' 모드의 작동 원리
'w' 모드와 아주 비슷하게 새로운 파일을 만들어주는 역할을 하지만, 결정적인 차이가 딱 하나 있습니다.
- 파일이 없을 때: 정상적으로 빈 노트를 새로 만들어줍니다. (여기까진 'w'와 똑같습니다.)
- 파일이 이미 있을 때 (핵심!): "어? 여기 이미 똑같은 이름의 파일이 있는데요? 덮어쓰면 안 되니까 에러(FileExistsError)를 발생시켜서 알려드릴게요!" 라며 즉시 작동을 멈추고 경고를 뿜어냅니다.
💻 2. 코드로 보는 완벽한 방어
# 만약 'demofile3.txt'가 이미 존재하는 상태에서 아래 코드를 실행한다면?
# 'x' 모드로 열기를 시도합니다.
# 이미 파일이 있기 때문에 여기서 바로 에러가 발생하고 프로그램이 중단됩니다!
with open('demofile3.txt', 'x') as f:
f.write("새로운 내용을 쓰고 싶어요!")
# (파이썬의 철벽 방어 덕분에 기존 'demofile3.txt' 안의 내용은 무사히 살아남습니다.)
이렇게 'x' 모드를 사용하면 소중한 데이터가 실수로 날아가는 것을 완벽하게 막을 수 있답니다.
(참고로 보기 중에 있던 'b'는 이미지나 오디오 같은 바이너리(Binary) 파일을 다룰 때 쓰는 모드이고, 't'는 우리가 지금까지 쓰고 있던 텍스트(Text) 모드를 의미합니다.)
📝 3. 핵심 한 줄 총정리 요약
"새 파일을 만들고 싶지만, 혹시라도 기존에 있던 같은 이름의 파일을 실수로 덮어쓰는 것을 완벽하게 막고 싶다면 'w' 대신 'x' 모드를 사용하자!"

🗑️ 파이썬 완벽 가이드: 안전하게 폴더 지우기 (os.rmdir)
파이썬 코드로 파일을 지울 때는 os.remove(), 폴더(디렉토리)를 지울 때는 os.rmdir()을 사용합니다.
📖 핵심 원리: 파이썬의 데이터 보호 안전장치
os.rmdir() 명령어로 폴더를 지우라고 명령했을 때, 파이썬은 아주 엄격한 규칙을 하나 적용합니다. 바로 "빈 폴더만 지울 수 있다"는 것입니다.
만약 지우려는 폴더 안에 파일이나 다른 하위 폴더가 단 하나라도 들어있다면, 파이썬은 "잠깐! 안에 중요한 데이터가 있을지도 몰라요!" 라며 에러(OSError)를 발생시키고 삭제를 단호하게 거부합니다. 이는 개발자가 실수로 코드를 잘못 짜서 소중한 데이터를 통째로 날려버리는 대참사를 막아주는 아주 고마운 안전장치입니다.
💻 코드로 보는 폴더 삭제 흐름
import os
# [1] 'my_empty_folder'라는 이름의 텅 빈 폴더가 있다고 가정해 보겠습니다.
os.rmdir("my_empty_folder")
# 결과: 아무런 문제 없이 폴더가 깔끔하게 삭제됩니다.
# [2] 'full_folder' 안에 텍스트 파일이 하나라도 들어있다면?
os.rmdir("full_folder")
# 결과: OSError: [WinError 145] 디렉터리가 비어 있지 않습니다. (에러 발생!)
💡 보너스 꿀팁: 꽉 찬 폴더를 강제로 지우고 싶다면?
"나는 안전장치 따위 필요 없고, 안에 뭐가 들어있든 폴더를 통째로 싹 다 날려버리고 싶어!" 라고 한다면, os 모듈 대신 shutil 이라는 조금 더 파괴적인(?) 도구함을 가져와야 합니다.
import shutil
# shutil 도구함의 rmtree 함수를 사용하면 내용물이 있어도 강제로 삭제합니다.
shutil.rmtree("full_folder")
📝 핵심 한 줄 총정리 요약
"os 모듈을 이용해 폴더를 지울 때는 혹시 모를 데이터 손실을 막기 위해 반드시 그 안이 텅 비어있어야만(True) 지울 수 있다!"
'두두 IT > 파이썬 퀴즈' 카테고리의 다른 글
| [TODO] 비밀번호가 맞으면 해제, 5번 틀리면 강제종료 (0) | 2026.05.10 |
|---|---|
| [W3S 오답노트] Python File Handling / Python Open File (0) | 2026.05.06 |
| [W3S 오답노트] Python Inner Class (0) | 2026.05.06 |
| [W3S 오답노트] Python Encapsulation __ (0) | 2026.05.06 |
| [W3S 오답노트] Python Inheritance (0) | 2026.05.06 |