Python에서 텍스트 파일에 데이터를 쓰는 작업은 데이터 저장, 로그 기록, 결과 출력 등 다양한 상황에서 매우 중요합니다.
이를 위해 사용되는 대표적인 파일 객체의 메서드가 바로 write()와 writelines()입니다.
이 장에서는 파일 쓰기 동작의 핵심 원리, 두 메서드의 차이점, 사용 시 주의사항, 실전 활용 예제까지 깊이 있게 설명합니다.
1. 파일 쓰기 기본 개념
파일을 쓰기 위해서는 먼저 open() 함수로 파일을 쓰기 모드로 열어야 합니다.
쓰기 모드는 아래와 같습니다:
모드 | 설명 |
'w' | 쓰기 모드. 기존 파일이 있으면 내용을 모두 삭제 후 새로 씀 |
'a' | 추가 모드. 기존 파일 끝에 내용을 덧붙임 |
'x' | 새 파일 생성. 파일이 이미 있으면 에러 발생 |
'x+' , 'a+' | 쓰기와 읽기 동시 가능 |
예시:
with open("example.txt", "w", encoding="utf-8") as f:
f.write("Hello, World!\n")
2. write() 메서드 – 문자열 단위 쓰기
㉮ 기본 사용법
with open("output.txt", "w", encoding="utf-8") as f:
f.write("첫 번째 줄입니다.\n")
f.write("두 번째 줄입니다.\n")
• 문자열 단위로 한 번에 한 줄씩 또는 전체 문자열을 씀
• 줄바꿈(\n)은 자동으로 삽입되지 않음 → 개발자가 직접 넣어야 함
㉯ 반복문을 활용한 쓰기
lines = ["파이썬은 재미있다", "파일 입출력도 중요하다", "실습이 최고다!"]
with open("log.txt", "w", encoding="utf-8") as f:
for line in lines:
f.write(line + "\n")
✅ write()는 내부적으로 버퍼에 먼저 저장된 후, 일정 조건(버퍼 가득참, flush 호출 등)에서 디스크에 기록됨
→ 원활한 저장을 위해 f.flush() 또는 f.close() 사용 권장
㉰ 덮어쓰기 주의 (w 모드의 특징)
with open("data.txt", "w", encoding="utf-8") as f:
f.write("이 내용이 기존 내용을 모두 덮어씁니다.")
⚠️ 'w' 모드에서는 기존 파일의 모든 내용이 삭제되므로, 덮어쓰기 방지용 백업 또는 존재 여부 확인 로직이 필요합니다.
3. writelines() 메서드 – 여러 줄 리스트를 한 번에 쓰기
㉮ 기본 사용법
lines = ["첫 줄입니다.\n", "두 번째 줄입니다.\n", "세 번째 줄입니다.\n"]
with open("lines.txt", "w", encoding="utf-8") as f:
f.writelines(lines)
• 리스트나 이터러블(iterable) 객체에서 문자열들을 반복 없이 한 번에 파일에 기록
• 내부적으로 반복문 없이 처리되므로 성능상 유리
• 각 줄에 \n이 포함되어 있어야 줄바꿈이 적용됨
㉯ 줄바꿈 없는 리스트 사용 시
lines = ["한줄", "두줄", "세줄"]
with open("no_newline.txt", "w", encoding="utf-8") as f:
f.writelines([line + "\n" for line in lines])
✅ writelines()는 문자열을 그대로 연결해 쓰므로 줄바꿈 처리는 개발자가 직접 해야 함
㉰ write() vs writelines() 비교
항목 | write() | writelines() |
입력 형태 | 문자열 하나 | 문자열 리스트 또는 이터러블 |
줄바꿈 처리 | 직접 \n 삽입 필요 | 각 요소에 \n 포함되어야 함 |
성능 | 반복문 필요 | 한 번에 처리 (빠름) |
권장 용도 | 소량 문자열, 반복문 내 쓰기 | 다수 줄을 한 번에 기록할 때 |
4. 실무 예제: 로그 파일 쓰기 자동화
def log_errors(errors, filepath="errors.log"):
with open(filepath, "a", encoding="utf-8") as f:
for err in errors:
f.write(f"[ERROR] {err}\n")
log_errors(["파일 없음", "권한 오류", "데이터 파싱 실패"])
✅ a 모드로 열면 기존 로그에 추가 형식으로 기록 가능
✅ 시간 정보 추가 등 커스터마이징도 쉬움
5. 예외 발생 시 안전한 쓰기 패턴
try:
with open("report.txt", "w", encoding="utf-8") as f:
f.write("분석 결과 보고서입니다.\n")
except IOError as e:
print(f"파일 쓰기 중 오류 발생: {e}")
✅ 실무에서는 항상 예외 처리로 쓰기 실패 시 원인 추적 가능하도록 해야 함
6. 요약
매서드 | 기능 요약 |
write() | 문자열을 한 줄 또는 전체 텍스트로 기록 |
writelines() | 문자열 리스트를 한 번에 기록 |
줄바꿈 처리 | 개발자가 직접 \n 포함해야 함 |
덮어쓰기 방지 | w 모드 사용 시 주의, a 모드 또는 파일 존재 확인 로직 필요 |
권장 방식 | 항상 with open() 사용하여 자동으로 닫기 |
'코딩교육 > Python 초등교육에서 전문가까지' 카테고리의 다른 글
2단계 : 6. 파일 작업 중 예외 처리 (파일이 없는 경우) (0) | 2025.04.01 |
---|---|
2단계 : 6. 파일 작업 후 반드시 닫기 - close() 와 with open의 차이와 선택기준 (0) | 2025.03.31 |
2단계 : 6. 파일 읽기 - read(), readline(), readlines() (0) | 2025.03.28 |
2단계 : 6. 텍스트 파일 열기 (open() 함수와 파일 모드) (0) | 2025.03.27 |
2단계 : 5. 리스트와 반복문 (실습:도서관리시스템) (1) | 2025.03.26 |