안녕하세요! 지난 시간에는 파이썬에서 파일을 열고(open()), 파일의 내용을 읽어오는 다양한 방법(read(), readline(), readlines())에 대해 알아보았습니다. 그리고 파일을 사용한 후에는 반드시 close() 메서드로 파일을 닫아야 한다는 점을 강조했었죠.
이번 시간에는 파일에 데이터를 쓰는(Write) 방법에 대해 자세히 살펴보겠습니다. 파일에 내용을 쓰는 write()와 writelines() 메서드를 배우고, 무엇보다 파일 입출력 시 파일이 자동으로 닫히도록 보장해주는 with 구문의 중요성과 사용법을 집중적으로 다룰 것입니다.
Part 1: 파일에 데이터 쓰기 - write()와 writelines()
파일에 데이터를 쓰기 위해서는 open() 함수를 쓰기 모드('w') 또는 추가 모드('a')로 열어야 합니다.
- 'w' (쓰기 모드):
- 파일이 존재하면 기존 내용을 모두 지우고 새롭게 씁니다.
- 파일이 없으면 새로운 파일을 생성합니다.
- 'a' (추가 모드):
- 파일이 존재하면 기존 내용의 맨 뒤에 이어서 씁니다.
- 파일이 없으면 새로운 파일을 생성합니다.
1. write() - 문자열 한 개 쓰기
- write(string) 메서드는 지정된 문자열(string)을 파일에 씁니다.
- 주의: write()는 자동으로 줄바꿈을 해주지 않습니다. 새로운 줄로 넘어가려면 문자열 끝에 \n (줄바꿈 문자)을 명시적으로 추가해야 합니다.
예시:
# 파일 이름: file_write_w_mode.py
# 'w' 모드로 파일 열기 (기존 내용 있으면 모두 지워짐)
file_w = open("my_new_file.txt", "w", encoding="utf-8") # 한글 사용을 위해 encoding="utf-8" 권장
file_w.write("안녕하세요, 파이썬!\n")
file_w.write("파일에 내용을 쓰고 있습니다.\n")
file_w.write("새로운 줄입니다.")
file_w.close() # 파일 닫기
print("my_new_file.txt 파일에 내용이 작성되었습니다.")
# 'a' 모드로 파일 열기 (기존 내용 뒤에 추가)
file_a = open("my_new_file.txt", "a", encoding="utf-8")
file_a.write("\n이것은 추가된 내용입니다.") # 기존 내용 뒤에 이어서 추가
file_a.write("\n다음에 또 만나요!")
file_a.close() # 파일 닫기
print("my_new_file.txt 파일에 내용이 추가되었습니다.")
[VS Code 터미널 출력]
my_new_file.txt 파일에 내용이 작성되었습니다.
my_new_file.txt 파일에 내용이 추가되었습니다.
[VS Code 탐색기에서 'my_new_file.txt'를 열었을 때의 내용]

2. writelines() - 리스트(또는 iterable)의 내용을 쓰기
- writelines(iterable_of_strings) 메서드는 문자열을 요소로 가지는 리스트(iterable)를 받아, 그 모든 요소를 파일에 씁니다.
- 주의: write()와 마찬가지로, writelines()도 자동으로 줄바꿈을 해주지 않습니다. 각 문자열 요소의 끝에 \n을 포함해야 각 줄이 새 줄에 작성됩니다.
예시:
# 파일 이름: file_writelines.py
lines_to_write = [
"첫 번째 데이터 줄\n",
"두 번째 데이터 줄\n",
"세 번째 데이터 줄" # 마지막 줄은 줄바꿈 없어도 됨 (다음 write/append 시 이어서 써짐)
]
with open("my_lines.txt", "w", encoding="utf-8") as file: # with 구문 미리 사용 (다음 Part에서 자세히 설명)
file.writelines(lines_to_write)
print("my_lines.txt 파일에 리스트 내용이 작성되었습니다.")
# 다시 열어 추가하고 싶을 때
more_lines = [
"\n추가 데이터 1",
"\n추가 데이터 2"
]
with open("my_lines.txt", "a", encoding="utf-8") as file:
file.writelines(more_lines)
print("my_lines.txt 파일에 리스트 내용이 추가되었습니다.")
[VS Code 터미널 출력]
my_lines.txt 파일에 리스트 내용이 작성되었습니다.
my_lines.txt 파일에 리스트 내용이 추가되었습니다.
[VS Code 탐색기에서 'my_lines.txt'를 열었을 때의 내용]

Part 3: with 구문 - 파일을 안전하게 다루는 법 (매우 중요!)
이전 포스팅에서 파일을 열면 반드시 close() 메서드로 닫아주어야 한다고 강조했습니다. 하지만 만약 파일 작업을 하던 도중에 오류가 발생하면 close()가 호출되지 못하고 파일이 열린 채로 남게 될 수 있습니다.
이러한 문제를 해결하고, 파일을 항상 안전하게 열고 닫도록 보장해주는 구문이 바로 with 구문입니다. with 구문을 사용하면 파일 작업을 마치거나 중간에 오류가 발생하더라도 자동으로 파일을 닫아줍니다.
1. with 구문 기본 형식
with open(파일_경로, 모드) as 파일_객체_이름:
# 파일을 사용하는 코드 블록
# 이 블록이 끝나면 파일이 자동으로 닫힙니다.
- open(...) as 파일_객체_이름: open() 함수로 파일을 열고, 그 파일 객체를 as 뒤에 지정한 이름(변수)으로 사용할 수 있게 해줍니다.
- 들여쓰기: with 구문 아래의 코드 블록은 반드시 들여쓰기를 해야 합니다. 이 블록 안에서만 파일 객체가 유효합니다.
예시: with 구문으로 파일 쓰기 및 읽기
# 파일 이름: file_with_statement.py
# with 구문으로 파일에 쓰기
print("--- with 구문으로 파일에 쓰기 ---")
with open("safe_file.txt", "w", encoding="utf-8") as file:
file.write("with 구문은 파일을 안전하게 닫아줍니다.\n")
file.write("오류가 발생해도 자동으로 닫힙니다.")
print("safe_file.txt 에 내용이 작성되었습니다.")
# with 구문으로 파일 읽기
print("\n--- with 구문으로 파일 읽기 ---")
with open("safe_file.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
print("safe_file.txt 내용을 읽었습니다.")
# with 블록 밖에서는 파일 객체에 접근할 수 없습니다.
# print(file.closed) # True (파일이 닫혔음을 확인)
# file.read() # ValueError: I/O operation on closed file. (오류 발생)
[VS Code 터미널 출력]
--- with 구문으로 파일에 쓰기 ---
safe_file.txt 에 내용이 작성되었습니다.
--- with 구문으로 파일 읽기 ---
with 구문은 파일을 안전하게 닫아줍니다.
오류가 발생해도 자동으로 닫힙니다.
safe_file.txt 내용을 읽었습니다.
[VS Code 탐색기에서 'safe_file.txt'를 열었을 때의 내용]

마무리하며
이번 시간에는 파이썬에서 파일에 데이터를 쓰는(write(), writelines()) 방법과, 파일 입출력을 안전하게 처리할 수 있도록 보장해주는 with 구문에 대해 자세히 알아보았습니다.
- 'w' 모드: 파일 새로 쓰기 (기존 내용 삭제)
- 'a' 모드: 파일에 내용 추가 (기존 내용 유지)
- write(): 문자열 하나 쓰기 (\n으로 줄바꿈 필요)
- writelines(): 문자열 리스트 쓰기 (각 요소에 \n 포함 필요)
- with open(...) as file:: 파일을 열고 닫는 과정을 자동으로 처리하여, 오류 발생 시에도 파일이 안전하게 닫히도록 보장합니다. 가장 권장되는 파일 입출력 방식입니다.
이제 여러분은 파이썬 프로그램이 외부 파일에 데이터를 저장하거나, 필요한 데이터를 파일에서 불러와 활용할 수 있는 기본적인 능력을 갖추게 되었습니다.
다음 포스팅에서는 실생활에서 자주 사용되는 파일 형식인 CSV (Comma Separated Values) 파일을 파이썬으로 다루는 방법에 대해 알아보겠습니다.
궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!
'Python' 카테고리의 다른 글
5-4. 예외 처리 try-except 구문 (0) | 2025.06.28 |
---|---|
5-3. CSV 파일 다루기 (0) | 2025.06.27 |
4-6. 재귀 함수 이해하기 (0) | 2025.06.27 |
4-5. 지역변수 vs 전역변수 (0) | 2025.06.26 |
4-4. 람다(lambda) 함수 (0) | 2025.06.26 |