Python 기초

Python 파일 읽기와 쓰기

PyExplorer 2024. 12. 1. 11:30
728x90

Python 파일 읽기와 쓰기

안녕하세요, 'Deep Python Studio'입니다. 오늘은 Python에서 파일을 읽고 쓰는 방법을 알아보려고 합니다. Python은 간단한 명령어로 파일 입출력을 지원하기 때문에, 이를 통해 파일을 쉽게 다룰 수 있습니다. 이번 포스팅에서는 텍스트 파일을 이용해 파일을 읽고 쓰는 예제를 통해 Python의 파일 입출력 기초를 배우겠습니다.

파일 열기와 닫기

Python에서 파일을 다루기 위해서는 우선 파일을 열어야 합니다. 파일을 열기 위해서는 open() 함수를 사용합니다. 파일을 모두 사용한 후에는 반드시 닫아야 하며, 이를 위해 close() 메서드를 사용합니다.

# 파일 열기 예제
file = open('example.txt', 'w')  # 'w' 모드는 쓰기 모드입니다.
file.write("Hello, Python!")
file.close()  # 파일을 사용한 후 반드시 닫아야 합니다.

위 코드에서는 example.txt라는 파일을 쓰기('w') 모드로 열고, 텍스트를 작성한 후 파일을 닫았습니다. 파일을 닫는 것은 매우 중요하며, 파일을 제대로 닫지 않으면 데이터 손실이나 파일이 손상될 수 있습니다.

파일 모드

open() 함수는 파일을 열 때 모드를 지정하는 매개변수를 필요로 합니다. 대표적인 파일 모드들은 다음과 같습니다:

  • 'r' : 읽기 모드. 파일이 존재해야 합니다.
  • 'w' : 쓰기 모드. 파일이 없다면 새 파일을 생성하고, 파일이 존재한다면 기존 내용을 삭제하고 새로 작성합니다.
  • 'a' : 추가 모드. 파일의 끝에 내용을 추가합니다. 파일이 없으면 새 파일을 생성합니다.
  • 'b' : 바이너리 모드. 파일을 바이너리로 읽거나 쓸 때 사용합니다.

파일 모드는 조합이 가능하여, 예를 들어 'rb'는 바이너리 읽기 모드를 의미합니다.

파일에 쓰기 - write() 함수

파일에 데이터를 쓰는 방법은 여러 가지가 있지만, 가장 기본적인 방법은 write() 함수를 사용하는 것입니다.

# 파일 쓰기 예제
with open('example.txt', 'w') as file:
    file.write("Hello, world!\n")
    file.write("This is Python file I/O example.")

위 예제에서는 with 문을 사용해 파일을 엽니다. with 문을 사용하면 파일을 자동으로 닫아주기 때문에, close()를 명시적으로 호출하지 않아도 됩니다. write() 함수는 파일에 문자열을 쓰고, 작성할 데이터가 많을 경우 여러 번 호출할 수 있습니다.

파일에서 읽기 - read() 함수

파일에서 데이터를 읽는 방법도 여러 가지가 있지만, 가장 기본적인 방법은 read() 함수를 사용하는 것입니다.

# 파일 읽기 예제
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

위 코드에서는 파일을 읽기('r') 모드로 열고, read() 함수를 사용해 파일의 모든 내용을 읽어서 content 변수에 저장합니다. 그리고 그 내용을 화면에 출력합니다.

파일에서 한 줄씩 읽기 - readline() 함수

큰 파일의 경우에는 파일의 내용을 한꺼번에 읽기보다는 한 줄씩 읽는 것이 효율적일 수 있습니다. 이때는 readline() 함수를 사용하면 됩니다.

# 파일에서 한 줄씩 읽기 예제
with open('example.txt', 'r') as file:
    line = file.readline()
    while line:
        print(line.strip())  # 줄바꿈 문자 제거 후 출력
        line = file.readline()

readline() 함수는 파일에서 한 줄을 읽어옵니다. 파일의 끝에 도달하면 빈 문자열을 반환하기 때문에, while 문을 사용해 파일 끝까지 읽을 수 있습니다.

모든 줄을 리스트로 읽기 - readlines() 함수

파일의 모든 줄을 한 번에 리스트로 읽고 싶다면, readlines() 함수를 사용할 수 있습니다.

# 모든 줄을 리스트로 읽기 예제
with open('example.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())

readlines() 함수는 파일의 모든 줄을 리스트로 반환합니다. 이후 for 루프를 사용해 각 줄을 순회하며 내용을 출력할 수 있습니다.

파일 쓰기 모드 vs 추가 모드

파일에 데이터를 추가로 쓰고 싶을 때는 'a' 모드를 사용합니다. 'w' 모드는 파일을 덮어쓰기 때문에 기존 데이터를 보존하고 싶다면 'a' 모드를 사용해야 합니다.

# 파일에 데이터 추가하기
with open('example.txt', 'a') as file:
    file.write("\nAppending a new line.")

위 예제에서는 'a' 모드를 사용하여 파일의 끝에 새로운 내용을 추가했습니다.

예외 처리

파일 작업을 할 때는 파일이 존재하지 않거나 권한이 없어서 발생할 수 있는 오류에 대비하는 것이 좋습니다. Python에서는 try-except 구문을 사용해 예외 처리를 할 수 있습니다.

# 파일 입출력 예외 처리 예제
try:
    with open('non_existent_file.txt', 'r') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")
except Exception as e:
    print(f"예기치 않은 오류 발생: {e}")

위 코드에서는 파일이 존재하지 않는 경우 FileNotFoundError를 처리하여 사용자에게 알립니다. 이외에도 예기치 않은 오류가 발생했을 때는 해당 오류 메시지를 출력합니다.

CSV 파일 다루기

CSV 파일은 데이터를 저장하고 교환하는 데 많이 사용되는 형식입니다. Python의 csv 모듈을 사용하면 CSV 파일을 쉽게 읽고 쓸 수 있습니다.

CSV 파일 쓰기

CSV 파일에 데이터를 쓰기 위해서는 csv.writer()를 사용할 수 있습니다.

import csv

# CSV 파일 쓰기 예제
with open('example.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['Name', 'Age', 'City'])
    writer.writerow(['Alice', 30, 'New York'])
    writer.writerow(['Bob', 25, 'Los Angeles'])

위 코드에서는 example.csv 파일을 열고 csv.writer()를 사용해 데이터를 작성합니다. writer.writerow() 메서드를 사용하여 각 행을 추가할 수 있습니다. newline='' 매개변수는 Windows에서 빈 줄이 추가되는 문제를 방지합니다.

CSV 파일 읽기

CSV 파일을 읽기 위해서는 csv.reader()를 사용할 수 있습니다.

import csv

# CSV 파일 읽기 예제
with open('example.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(', '.join(row))

위 코드에서는 csv.reader()를 사용해 CSV 파일을 읽고, 각 행을 리스트로 반환합니다. for 루프를 사용해 각 행을 순회하며 내용을 출력합니다.

CSV 파일을 딕셔너리 형태로 읽기

CSV 파일을 딕셔너리 형태로 읽고 싶다면 csv.DictReader()를 사용할 수 있습니다.

import csv

# CSV 파일을 딕셔너리 형태로 읽기 예제
with open('example.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Name: {row['Name']}, Age: {row['Age']}, City: {row['City']}")

DictReader()를 사용하면 CSV 파일의 첫 번째 행을 키로 사용하여 각 행을 딕셔너리로 반환합니다. 이를 통해 열 이름으로 데이터를 쉽게 접근할 수 있습니다.

마무리

오늘은 Python에서 파일을 읽고 쓰는 방법에 대해 알아보았습니다. 파일 입출력은 데이터를 저장하고 활용하는 데 있어 매우 중요한 부분이기 때문에, 다양한 파일 모드와 함수를 잘 이해하고 사용하는 것이 중요합니다. 간단한 파일 쓰기와 읽기부터 시작해 Python의 파일 입출력 기능을 익혀보세요. 특히 CSV 파일은 데이터를 다룰 때 많이 사용되므로 csv 모듈을 활용해보시기 바랍니다.

728x90