개발/Python

[초급반] Step 8. 파일 입출력 (File I/O): 텍스트 파일 읽고 쓰기

ophelisis 2025. 12. 16. 17:43
반응형

안녕하세요! 파이썬 학습 여덟 번째 시간입니다. 지금까지 우리가 만든 데이터와 변수들은 프로그램이 종료되면 사라졌습니다.

오늘은 우리가 만든 데이터를 영구적으로 저장하고, 필요할 때 다시 불러올 수 있는 핵심 기능인 **파일 입출력(File Input/Output)**에 대해 알아보겠습니다. 이 기능을 통해 파이썬은 외부 환경(하드 디스크)과 소통하게 됩니다.


1. 파일 입출력의 기본 절차

파일 입출력(I/O)은 항상 다음 세 단계를 거칩니다.

  1. 파일 열기 (Open): open() 함수를 사용하여 파일에 대한 연결 통로를 만듭니다.
  2. 데이터 작업 (Read/Write): 통로를 통해 데이터를 읽거나 씁니다.
  3. 파일 닫기 (Close): 작업을 마친 후 close() 함수로 통로를 닫아 파일 손상 및 리소스 누수를 방지합니다.

2. 파일 열기: open()과 모드(Mode)

파일을 열 때는 어떤 목적으로 열 것인지 **모드(Mode)**를 지정해야 합니다.

모드 목적 파일 존재 여부
'r' (Read) 읽기 전용 파일이 없으면 오류 발생
'w' (Write) 쓰기 전용 파일이 없으면 새로 생성, 있으면 내용 모두 지우고 새로 씀 (주의!)
'a' (Append) 추가 쓰기 파일이 없으면 새로 생성, 있으면 내용 끝에 추가

💡 기본 파일 열기 구조 (사용 비권장)

Python
 
f = open("new_data.txt", 'w') # 파일 열기 (쓰기 모드)
f.write("이 데이터가 파일에 저장됩니다.") # 데이터 쓰기
f.close() # 파일 닫기 (필수)

3. 안전한 파일 처리: with 구문 (권장)

만약 파일 작업 도중 예기치 않은 오류가 발생하면 f.close()가 실행되지 않아 파일이 손상되거나 리소스 낭비가 발생할 수 있습니다.

with 구문을 사용하면 이 문제를 안전하게 해결할 수 있습니다. with 블록이 종료되는 순간 파이썬이 자동으로 close()를 호출해 줍니다.

Python
 
with open("my_data.txt", 'w') as f:
    f.write("첫 번째 줄입니다.\n")
    f.write("두 번째 줄입니다.\n")
# with 블록을 벗어나는 순간 자동으로 파일이 닫힙니다.

4. 파일에 데이터 쓰기 ('w' 또는 'a')

4-1. 쓰기 ('w') 예제: 기존 내용 덮어쓰기

Python
 
# 기존 파일이 있다면 내용이 모두 지워지고 새로 쓰여집니다.
with open("report.txt", 'w', encoding='utf-8') as f: 
    data = "파이썬 파일 입출력 테스트\n"
    f.write(data) 
    
    list_data = ["Alice\n", "Bob\n", "Charlie\n"]
    f.writelines(list_data) # 리스트의 내용을 한 번에 쓰기

# 결과: report.txt 파일에는 '파이썬 파일 입출력 테스트'와 리스트 내용만 남습니다.

4-2. 추가 쓰기 ('a') 예제: 내용 이어 붙이기

Python
 
# 'a' 모드는 파일 내용의 맨 끝에 새로운 내용을 추가합니다.
with open("report.txt", 'a', encoding='utf-8') as f:
    f.write("\n---추가된 내용---")

# 결과: 기존 내용 다음에 '---추가된 내용---'이 이어 붙여집니다.

5. 파일에서 데이터 읽기 ('r')

파일을 읽을 때는 목적에 따라 여러 함수를 사용할 수 있습니다.

5-1. read(): 전체 내용을 하나의 문자열로 읽기

Python
 
with open("report.txt", 'r', encoding='utf-8') as f:
    content = f.read() # 파일 전체 내용을 하나의 문자열로 저장
    print(content)

5-2. readline(): 한 줄씩 읽기

주로 반복문(while 또는 for)을 사용하여 파일의 내용을 한 줄씩 처리할 때 사용합니다.

Python
 
with open("report.txt", 'r', encoding='utf-8') as f:
    line = f.readline() # 첫 번째 줄을 읽고
    print(line.strip()) # strip()으로 줄 바꿈 문자 제거
    
    line = f.readline() # 다음 줄을 읽습니다.
    print(line.strip())

5-3. readlines(): 모든 줄을 리스트로 읽기

파일의 모든 줄을 각각 리스트의 요소로 저장하여 한 번에 가져옵니다.

Python
 
with open("report.txt", 'r', encoding='utf-8') as f:
    all_lines = f.readlines() # 모든 줄이 리스트 형태로 저장됨
    
    for line in all_lines:
        print(line.strip())
# 결과: 리스트의 각 요소가 출력됩니다.

인코딩(Encoding) 문제:

encoding='utf-8' 옵션은 한글과 같은 다양한 문자를 파일에 올바르게 읽고 쓰기 위해 매우 중요합니다. 파일을 열 때는 반드시 명시해 주는 것이 좋습니다.

반응형