본문 바로가기

카테고리 없음

5-1. 파일 읽기(open, read, readline)

파이썬 파일 읽기 타이틀 이미지


 

안녕하세요! 지난 시간에는 재귀 함수의 개념과 활용법에 대해 알아보았습니다. 이제 함수를 통해 코드를 재사용하고, 복잡한 문제를 효율적으로 해결하는 방법을 익히셨을 거예요.

이번 시간부터는 프로그램이 외부 세계와 소통하는 중요한 방법 중 하나인 **파일 입출력(File Input/Output)**에 대해 알아보겠습니다. 프로그램이 실행되는 동안 생성된 데이터를 저장하거나, 이미 저장된 데이터를 불러와서 사용할 때 파일 입출력이 필요합니다.

그 첫 번째 단계로, 파이썬에서 파일을 열고 내용을 읽어오는 방법에 대해 자세히 살펴보겠습니다. 파일을 여는 open() 함수, 그리고 내용을 읽는 read(), readline(), readlines() 메서드를 중심으로 학습할 것입니다.


Part 1: open() 함수 - 파일 열기

파일을 읽거나 쓰기 위해서는 먼저 open() 함수를 사용하여 파일을 열어야 합니다. open() 함수는 파일의 경로와 열기 모드(Mode)를 지정하여 파일을 '열린' 상태로 만듭니다.

1. open() 함수 기본 형식

Python
 
open(파일_경로, 모드)
 
  • 파일_경로: 열고자 하는 파일의 위치를 나타내는 문자열입니다.
    • 현재 파이썬 스크립트와 같은 폴더에 있다면 파일 이름만 적으면 됩니다. (예: "my_data.txt")
    • 다른 폴더에 있다면 전체 경로를 적어야 합니다. (예: "C:/Users/YourUser/Documents/data.txt" 또는 "data/my_data.txt")
    • 주의: Windows에서는 경로 구분자로 \ 대신 /를 사용하거나 \\ 또는 Raw String (r"C:\...")을 사용해야 합니다. 일반적으로 /를 사용하는 것이 편리합니다.
  • 모드: 파일을 어떤 목적으로 열 것인지를 나타내는 문자열입니다.이번 포스팅에서는 주로 **'r' (읽기 모드)**를 사용합니다.
  •  'r' | 읽기 (read) | 파일의 내용을 읽을 때 사용합니다. (기본값) 
  • 'w' | 쓰기 (write) | 파일에 내용을 쓸 때 사용합니다. 기존 내용을 모두 지우고 새로 씁니다. 파일이 없으면 새로 생성합니다. 
  • 'a' | 추가 (append) | 파일에 내용을 추가할 때 사용합니다. 기존 내용 뒤에 이어서 씁니다. 파일이 없으면 새로 생성합니다.
  • 'x' | 독점 생성 (exclusive creation) | 파일을 새로 생성할 때 사용합니다. 파일이 이미 존재하면 오류(FileExistsError)가 발생합니다. 
  • 'b' | 이진 (binary) | 이진 파일(이미지, 동영상 등)을 다룰 때 사용합니다. rb, wb와 같이 사용됩니다.
  • 't' | 텍스트 (text) | 텍스트 파일을 다룰 때 사용합니다. (기본값) rt, wt와 같이 사용됩니다. (r만 쓰면 rt와 동일)

2. 파일을 열고 닫기 (매우 중요!)

파일을 열었으면 반드시 파일을 닫아주어야 합니다. 파일을 닫지 않으면 데이터가 손상되거나, 다른 프로그램에서 해당 파일을 사용하지 못하는 문제가 발생할 수 있습니다. close() 메서드를 사용합니다.

Python
 
# 파일 생성 (예시를 위해 임시로 쓰기 모드 사용)
# file = open("example.txt", "w")
# file.write("안녕하세요.\n이것은 예제 파일입니다.\n파이썬 파일 입출력!")
# file.close()

# 파일 열기
my_file = open("example.txt", "r") # 'example.txt' 파일을 읽기 모드로 엽니다.
# 파일 내용 읽기 (다음 파트에서 자세히)
content = my_file.read()
print(content)
# 파일 닫기
my_file.close()
 

 

[example.txt 파일 내용]

안녕하세요.
이것은 예제 파일입니다.
파이썬 파일 입출력!

[VS Code 터미널 출력]

파이썬 open 함수로 파일 열고 close 함수로 닫는 예시


Part 2: read(), readline(), readlines() 메서드 - 파일 내용 읽기

open() 함수로 파일을 열면, 파일 객체(File Object)가 반환됩니다. 이 파일 객체는 파일을 읽을 수 있는 다양한 메서드를 제공합니다.

1. read() - 파일 전체 내용 읽기

  • read() 메서드는 파일 전체 내용을 하나의 **문자열(String)**로 반환합니다.

예시:

Python
 
# 파일 이름: file_read.py

# 'example.txt' 파일이 있다고 가정합니다. (없다면 직접 만들어주세요)
# 내용:
# 안녕하세요.
# 이것은 예제 파일입니다.
# 파이썬 파일 입출력!

file = open("example.txt", "r")
content = file.read() # 파일 전체 내용을 읽어옵니다.
print("--- read()로 읽은 내용 ---")
print(content)
file.close()

# 한 번 read()를 하면 파일 포인터가 파일의 끝으로 이동하므로,
# 다시 read()를 해도 내용이 없습니다.
file = open("example.txt", "r")
first_read = file.read()
second_read = file.read() # 빈 문자열이 됩니다.
print(f"\n첫 번째 read(): '{first_read}'")
print(f"두 번째 read(): '{second_read}' (비어있음)")
file.close()
 

 

[VS Code 터미널 출력]

파이썬 read 함수로 파일 내용 전체 읽기 예시

2. readline() - 한 줄씩 읽기

  • readline() 메서드는 파일에서 한 줄씩 읽어와 문자열로 반환합니다. 각 줄의 끝에는 줄바꿈 문자(\n)가 포함됩니다.
  • 더 이상 읽을 줄이 없으면 빈 문자열('')을 반환합니다.
  • 주로 while 반복문과 함께 사용하여 파일의 모든 줄을 순회할 때 유용합니다.

예시:

Python
 
# 파일 이름: file_readline.py

# 'example.txt' 파일이 있다고 가정합니다.
# 내용:
# 안녕하세요.
# 이것은 예제 파일입니다.
# 파이썬 파일 입출력!

file = open("example.txt", "r")

print("--- readline()으로 한 줄씩 읽은 내용 ---")
line1 = file.readline()
print(f"첫 번째 줄: {line1.strip()}") # .strip()은 앞뒤 공백과 줄바꿈 문자 제거
line2 = file.readline()
print(f"두 번째 줄: {line2.strip()}")
line3 = file.readline()
print(f"세 번째 줄: {line3.strip()}")
line4 = file.readline() # 더 이상 읽을 줄 없음
print(f"네 번째 줄 (빈 문자열): '{line4}'") # 빈 문자열 출력

file.close()

print("\n--- readline()과 while 반복문으로 모든 줄 읽기 ---")
file = open("example.txt", "r")
while True:
    line = file.readline()
    if not line: # 읽어올 줄이 없으면 (빈 문자열이면) 반복 종료
        break
    print(line.strip()) # 줄바꿈 제거 후 출력
file.close()
 

 

[VS Code 터미널 출력]

파이썬 readline 함수로 파일 내용 한 줄씩 읽기 예시

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

  • readlines() 메서드는 파일의 모든 줄을 읽어와서 각 줄을 요소로 하는 **리스트(List)**로 반환합니다. 각 리스트 요소(줄)에는 줄바꿈 문자(\n)가 포함됩니다.
  • 파일의 내용을 한 번에 리스트로 가져와서 처리하고 싶을 때 유용합니다.

예시:

Python
 
# 파일 이름: file_readlines.py

# 'example.txt' 파일이 있다고 가정합니다.
# 내용:
# 안녕하세요.
# 이것은 예제 파일입니다.
# 파이썬 파일 입출력!

file = open("example.txt", "r")
lines = file.readlines() # 모든 줄을 리스트로 읽어옵니다.
print("--- readlines()로 읽은 내용 (리스트) ---")
print(lines) # 각 줄 끝에 \n이 포함되어 있음
file.close()

print("\n--- readlines() 후 for 문으로 출력 ---")
# 리스트로 받은 후 for 문으로 순회하며 처리
file = open("example.txt", "r")
for line in file.readlines():
    print(line.strip()) # 줄바꿈 제거 후 출력
file.close()

# 파일을 for 문으로 직접 순회하는 방법 (가장 파이썬스러운 방법)
# 이 방법은 파일을 한 번에 메모리에 모두 로드하지 않고, 줄 단위로 처리하여 효율적입니다.
print("\n--- 파일 객체를 for 문으로 직접 순회 (가장 권장) ---")
with open("example.txt", "r") as file: # with 문은 파일 자동 닫기 보장 (다음 포스팅)
    for line in file:
        print(line.strip())
 

 

[VS Code 터미널 출력]

파이썬 readlines 함수와 파일 객체 직접 순회 예시

마무리하며

이번 시간에는 파이썬에서 파일을 **읽기 모드로 열고(open() with 'r'), 내용을 읽어오는 다양한 방법(read(), readline(), readlines())**에 대해 알아보았습니다. 특히 파일을 사용한 후에는 반드시 close() 메서드로 파일을 닫아주어야 한다는 점을 강조했습니다.

  • read(): 파일 전체를 문자열로.
  • readline(): 한 줄씩 문자열로.
  • readlines(): 모든 줄을 리스트의 요소로.
  • for line in file: 가장 파이썬스러운 방법으로, 메모리 효율적으로 한 줄씩 읽음.

다음 포스팅에서는 파일에 데이터를 쓰는('w', 'a') 방법과, 파일을 안전하게 다룰 수 있는 with 구문에 대해 자세히 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형