04-4 파이썬의 입출력, 프로그램의 입출력

이번 강좌에서는 파이썬을 통한 입출력 방법에 대해 깊이 있게 살펴보도록 하겠습니다. 입출력은 모든 프로그래밍 언어의 근본적인 요소 중 하나로, 데이터를 읽고 쓰는 기능을 제공합니다. 파이썬에서는 다양한 방식으로 입출력을 수행할 수 있으며, 각각의 방법에 고유한 사용 사례가 있습니다.

표준 입출력(Standard Input/Output)

파이썬은 print() 함수를 통해 표준 출력(콘솔)에 데이터를 출력합니다. 이 함수는 따로 지정하지 않아도 기본적으로 문자열을 화면에 출력하는 방법입니다. print() 함수는 하나 이상의 데이터를 콤마로 구분하여 출력할 수도 있으며, 출력할 때 개행 문자를 포함하여 다양한 형식을 지정할 수 있습니다.

print("안녕하세요, 파이썬!")  # 기본 출력
print("이름:", "홍길동", "나이:", 25)  # 여러 항목을 출력

반대로 표준 입력을 받을 때는 input() 함수를 사용합니다. 사용자의 입력을 문자열로 받아들이며, 이를 통해 동적인 프로그램을 설계할 수 있습니다. input() 함수를 사용하여 입력받은 데이터는 항상 문자열 형태로 저장되므로, 필요에 따라 적절한 데이터 타입으로 변환하는 과정이 필수적입니다.

name = input("이름을 입력하세요: ")  # 사용자 입력
print("안녕하세요,", name)  # 입력받은 데이터를 출력

파일 입출력(File I/O)

파일 입출력은 데이터를 파일에 저장하거나 파일에서 데이터를 읽어오는 방법을 말합니다. 파이썬에서는 open() 함수를 사용하여 파일을 열고, 파일 객체의 메서드를 사용하여 데이터를 읽고 쓸 수 있습니다. 파일은 보통 텍스트 모드로 열리지만, 이진 모드로도 열 수 있습니다. 파일 모드는 읽기(‘r’), 쓰기(‘w’), 추가(‘a’) 등으로 지정할 수 있습니다.

# 파일에 데이터 쓰기
with open("example.txt", "w") as file:
    file.write("Hello, world!")  # 파일에 문자열 쓰기

위의 예제에서는 with 구문을 사용하여 파일을 엽니다. with 구문은 파일을 열고 나서 각종 작업을 수행한 후, 자동으로 파일을 닫아주는 역할을 합니다.

파일에서 데이터를 읽는 방법은 다음과 같습니다:

# 파일에서 데이터 읽기
with open("example.txt", "r") as file:
    content = file.read()  # 파일의 모든 내용을 읽어옴
    print(content)

파일 모드의 이해

파이썬에서 파일을 열 때 사용할 수 있는 다양한 모드가 있습니다. 각 모드는 파일을 어떻게 다룰지를 결정합니다.

  • r: 읽기 전용 모드로 파일을 엽니다. 파일이 존재하지 않으면 오류가 발생합니다.
  • w: 쓰기 전용 모드로 파일을 엽니다. 파일이 이미 존재한다면 내용을 덮어씁니다.
  • a: 추가 모드로 파일을 엽니다. 파일이 이미 있다면 끝에 내용을 추가합니다.
  • r+: 읽기/쓰기 모드로 파일을 엽니다. 파일이 존재해야 합니다.
  • w+: 읽기/쓰기 모드로 파일을 엽니다. 파일이 이미 존재한다면 내용을 덮어씁니다.
  • a+: 읽기/추가 모드로 파일을 엽니다. 파일이 이미 있다면 끝에 내용을 추가합니다.
  • b: 이진 모드로 파일을 엽니다.

예제: 바이너리 파일 읽기

텍스트 파일이 아니라 소위 바이너리 파일(이미지, 영상 등)을 열 때도 파이썬은 강력한 기능을 제공합니다.

with open("example.jpg", "rb") as binary_file:
    data = binary_file.read()
    print("File size:", len(data), "bytes")  # 파일의 크기를 바이트 단위로 출력

고급 입출력 기법

고급 파이썬 입출력 기능에는 파일을 특정 방식으로 처리하는 고급 사용이 포함됩니다. 예를 들어, CSV 파일을 처리하거나 JSON 파일을 읽는 작업은 입출력의 확장된 형태라 할 수 있습니다.

CSV 파일 처리

파이썬의 csv 모듈을 사용하여 CSV 파일을 보다 쉽게 처리할 수 있습니다. CSV 파일은 데이터를 카마(,)로 구분하여 저장하는 간단한 형태의 파일입니다.

import csv

# CSV 파일 쓰기
with open("data.csv", "w", newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Name", "Age"])
    writer.writerow(["Alice", 25])
    writer.writerow(["Bob", 30])

# CSV 파일 읽기
with open("data.csv", "r") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

JSON 파일 처리

JSON은 자바스크립트 객체 표기법을 파이썬에서 다루기 위한 역활을 합니다. 파이썬의 json 모듈은 JSON 형식을 파이썬 데이터 타입으로 변환하고 반대로 변환하는 기능을 제공합니다.

import json

# JSON 데이터 쓰기
data = {
    "name": "Charlie",
    "age": 35,
    "city": "Seoul"
}

with open("data.json", "w") as jsonfile:
    json.dump(data, jsonfile)

# JSON 데이터 읽기
with open("data.json", "r") as jsonfile:
    data_loaded = json.load(jsonfile)
    print(data_loaded)

NOTE: JSON과 CSV는 웹에서 데이터 교환에 많은 용도로 사용됩니다. 위험을 최소화하기 위해 데이터를 정확한 형식으로 처리하는 것이 중요합니다.

문자 인코딩과 디코딩

입출력을 할 때는 문자 인코딩과 디코딩을 올바르게 설정하는 것이 중요합니다. 특히 다국어를 지원하는 프로그램에서는 UTF-8을 사용하는 것이 일반적입니다.

# UTF-8 파일 쓰기
with open("utf8_file.txt", "w", encoding="utf-8") as file:
    file.write("안녕하세요. UTF-8 인코딩 파일입니다.")

# UTF-8 파일 읽기
with open("utf8_file.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)

인코딩을 설정하지 않으면, 파이썬은 개별 운영체제의 기본 설정을 따르게 됩니다. 이는 파일을 다른 시스템에서 사용할 때의 호환성 이슈를 일으킬 수 있습니다. 따라서 항상 명시적인 인코딩 설정이 권장됩니다.

결론

파이썬은 강력하고 유연한 입출력 가능성을 제공합니다. 입출력 과정은 단순한 데이터를 화면에 출력하거나 파일로부터 읽는데 그치지 않고, 다양한 형식의 데이터를 읽고 쓰는 데 필요한 방법들을 포함합니다. 표준 입출력부터 파일 입출력까지, 그리고 파일의 모드를 이해하고 다루는 것은 모두 중요한 스킬입니다.

계속해서 다양한 입출력 메서드와 응용을 연습하면서, 여러분의 프로그래밍 기술을 넓혀가길 바랍니다. 다음 번에는 파이썬의 예외 처리에 대해 자세히 알아보겠습니다. 질문이 있으면 언제든지 댓글로 남겨주세요!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다