Created at : 2024-09-02 13:26
Auther: Soo.Y

6. 파일 입출력 (File I/O)

파일 입출력은 데이터를 파일에 저장하거나 파일로부터 데이터를 읽어오는 작업을 의미합니다. 파이썬에서는 파일을 열고, 읽고, 쓰고, 닫는 작업을 매우 쉽게 수행할 수 있도록 다양한 기능을 제공합니다. 이 장에서는 파일 입출력의 기본 개념부터 고급 기능까지 다룰 것입니다.

6.1 파일 열기 (Opening Files)

파이썬에서 파일을 열기 위해서는 open() 함수를 사용합니다. open() 함수는 파일을 열고, 파일 객체를 반환합니다. 이 객체를 사용하여 파일을 읽거나 쓸 수 있습니다.

  • 기본 문법:
파일객체 = open(파일이름, 모드)
  • 파일 열기 모드:

    • 'r': 읽기 모드. 파일이 존재하지 않으면 오류 발생.
    • 'w': 쓰기 모드. 파일이 존재하면 내용을 덮어쓰고, 존재하지 않으면 새 파일 생성.
    • 'a': 추가 모드. 파일이 존재하면 내용의 끝에 추가하고, 존재하지 않으면 새 파일 생성.
    • 'b': 바이너리 모드. 텍스트 파일이 아닌 바이너리 파일을 읽거나 쓸 때 사용. (예: 이미지 파일)
    • 't': 텍스트 모드. 텍스트 파일을 읽거나 쓸 때 사용. (기본값)
  • 예제:

# 텍스트 파일을 읽기 모드로 열기
file = open("example.txt", "r")

6.2 파일 읽기 (Reading Files)

파일에서 데이터를 읽는 방법에는 여러 가지가 있습니다. read(), readline(), readlines() 메서드를 사용하면 파일 내용을 읽어올 수 있습니다.

  • read(): 파일의 전체 내용을 하나의 문자열로 읽어옵니다.
with open("example.txt", "r") as file:
    content = file.read()
    print(content)
  • readline(): 파일에서 한 줄씩 읽어옵니다.
with open("example.txt", "r") as file:
    line = file.readline()
    while line:
        print(line, end='')  # 각 줄을 출력
        line = file.readline()
  • readlines(): 파일의 모든 줄을 읽어 리스트로 반환합니다.
with open("example.txt", "r") as file:
    lines = file.readlines()
    for line in lines:
        print(line, end='')

6.3 파일 쓰기 (Writing Files)

파일에 데이터를 쓰기 위해서는 write() 또는 writelines() 메서드를 사용할 수 있습니다.

  • write(): 파일에 문자열을 씁니다. 쓰기 모드('w' 또는 'a')로 열어야 합니다.
with open("example.txt", "w") as file:
    file.write("Hello, World!\n")
    file.write("파일에 내용을 작성합니다.\n")
  • writelines(): 문자열의 리스트를 파일에 씁니다.
lines = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]
with open("example.txt", "w") as file:
    file.writelines(lines)

6.4 파일 닫기 (Closing Files)

파일 작업이 끝나면 반드시 close() 메서드를 호출하여 파일을 닫아야 합니다. 파일을 닫지 않으면 데이터 손실이 발생하거나 파일이 제대로 저장되지 않을 수 있습니다. 하지만 with 문을 사용하면 파일을 자동으로 닫을 수 있어 안전합니다.

  • 파일 닫기:
file = open("example.txt", "r")
# 파일 작업 수행
file.close()
  • with 문 사용:
with open("example.txt", "r") as file:
    content = file.read()
    print(content)

with 문을 사용하면 코드 블록이 종료될 때 파일이 자동으로 닫힙니다.

6.5 예외 처리와 파일 입출력

파일 작업 중 예기치 않은 오류가 발생할 수 있습니다. 이러한 경우, 예외 처리를 통해 오류를 처리하고 프로그램이 비정상적으로 종료되지 않도록 할 수 있습니다.

  • 예외 처리와 파일 입출력:
try:
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except IOError:
    print("파일을 읽는 중에 오류가 발생했습니다.")

이 예제에서는 파일이 존재하지 않거나 읽는 중에 오류가 발생할 경우, 예외가 처리됩니다.

6.6 CSV 파일 다루기

CSV(Comma-Separated Values) 파일은 데이터를 쉼표로 구분하여 저장하는 텍스트 파일입니다. 파이썬의 csv 모듈을 사용하여 CSV 파일을 쉽게 읽고 쓸 수 있습니다.

  • CSV 파일 읽기:
import csv
 
with open("example.csv", "r") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)
  • CSV 파일 쓰기:
import csv
 
with open("example.csv", "w", newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["이름", "나이", "도시"])
    writer.writerow(["홍길동", 30, "서울"])
    writer.writerow(["이몽룡", 25, "남원"])

6.7 JSON 파일 다루기

JSON(JavaScript Object Notation) 파일은 데이터를 구조화하여 저장하는 데 사용되는 파일 형식입니다. 파이썬의 json 모듈을 사용하여 JSON 파일을 읽고 쓸 수 있습니다.

  • JSON 파일 읽기:
import json
 
with open("example.json", "r") as file:
    data = json.load(file)
    print(data)
  • JSON 파일 쓰기:
import json
 
data = {
    "이름": "홍길동",
    "나이": 30,
    "도시": "서울"
}
 
with open("example.json", "w") as file:
    json.dump(data, file, indent=4)

이 예제에서 indent=4는 JSON 파일을 읽기 쉽게 들여쓰기를 적용하여 저장합니다.

6.8 파일과 디렉토리 관리

파이썬의 osshutil 모듈을 사용하면 파일과 디렉토리를 관리할 수 있습니다.

  • 파일 존재 여부 확인:
import os
 
if os.path.exists("example.txt"):
    print("파일이 존재합니다.")
else:
    print("파일이 존재하지 않습니다.")
  • 파일 삭제:
import os
 
os.remove("example.txt")
  • 디렉토리 생성:
import os
 
os.mkdir("새로운_폴더")
  • 디렉토리 삭제:
import os
 
os.rmdir("새로운_폴더")
  • 파일 및 디렉토리 복사:
import shutil
 
shutil.copy("example.txt", "example_copy.txt")  # 파일 복사
shutil.copytree("원본_폴더", "복사된_폴더")  # 디렉토리 복사

6.9 바이너리 파일 다루기

바이너리 파일은 텍스트가 아닌 데이터를 저장하는 파일로, 이미지, 오디오, 비디오 파일 등이 포함됩니다. 파이썬에서는 'b' 모드를 사용하여 바이너리 파일을 읽거나 쓸 수 있습니다.

  • 바이너리 파일 읽기:
with open("example.jpg", "rb") as file:
    data = file.read()
    print(data[:20])  # 처음 20바이트만 출력
  • 바이너리 파일 쓰기:
with open("copy.jpg", "wb") as file:
    file.write(data)

이 예제는 이미지 파일을 바이너리 모드로 읽고, 복사본을 생성하는 코드입니다.

이제 파이썬에서 파일 입출력에 대해 기본적으로 이해하게 되었습니다. 파일 입출력은 데이터를 영구적으로 저장하거나, 외부 파일로부터 데이터를 불러와 처리하는 데 매우 중요합니다.

관련 문서

1. 파이썬(Python) 이란