본문 바로가기
코딩교육/Python 초등교육에서 전문가까지

2단계 : 6. 파일 쓰기 - write() 와 writelines 완벽 이해

by 제리토리 2025. 3. 30.
728x90
반응형

 

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() 사용하여 자동으로 닫기

 

 

 

 

 

728x90
반응형