Python

[Python] - 텍스트 파일 처리

jyu_seo_ 2026. 1. 16. 16:25

텍스트 파일 처리 함수

Python은 텍스트 파일을 처리하는 내장 함수를 제공하므로 파일 읽기, 쓰기 및 추가와 같은 다양한 작업을 수행할수 있다. 가장 일반적으로 사용되는 기능중 일부는 다음과 같다.

 

1. open()

이 함수는 특정모드(ex: 읽기, 쓰기, 추가)에서 파일을 여는데 사용된다. 다양한 파일 작업을 수행하는데 사용할 수 있는 파일 개체를 반환한다. open() 함수의 구문은 다음과 같다.

file_object = open("file_name", "mode")

 

가장 일반적인 모드는 다음과 같다.

  • "r": 기존 파일의 내용을 읽기 위한 읽기 모드
  • "w": 쓰기 모드, 새 파일을 만들거나 기존 파일의 내용을 덮어 쓴다.
  • "a": 기존 파일에 데이터를 추가하기 위한 추가 모드.

2. read()

이 메서드는 파일의 내용을 단일 문자열로 읽는다. open() 함수를 사용하여 얻은 파일 객체에서 호출할수 있다.

file_object = open("file_name.txt","r")
content = file_object.read()
file_object.close()

3. readline()

이 메서드는 파일에서 한줄을 읽는다. open() 함수를 사용해서 얻은 파일 객체에서 호출할 수 있다.

file_object = open("file_name.txt", "r")
first_line = file_object.readline()
file_object.close()

 

4. readlines()

이 메서드는 파일의 모든 줄을 읽고 문자열 목록으로 반환한다. open()함수를 사용하여 얻은 파일 객체에서 호출할수 있다.

file_object = open("file_name.txt","r")
lines = file_object.readlines()
file_object.close()

5. write()

이 메서드는 파일에 문자열을 씁니다. open() 함수를 사용하여 얻은 파일 객체에서 호출할 수 있다.

file_object = open("file_name.txt", "w")
file_object.write("Hello, World!")
file_object.close()

6. writelines()

이 메서드는 문자열 목록을 파일에 씁니다. open() 함수를 사용하여 얻은 파일 객체에서 호출할 수 있다.

file_object = open("file_name.txt", "w")
lines =  ["Line 1\n", "Line 2\n", "Line 3\n"]
file_object.writelines(lines)
file_object.close()

 

* close()

이 메서드는 파일 개체를 닫고 파일과 관련된 모든 시스템 리소스를 해제합니다. 파일 작업을 마치면 호출해야 한다.

코드 블록이 실행된 후 자동으로 파일 닫기를 처리하므로 파일 작업시 with 문을 사용하는것이 좋다.

with open("file_name.txt", "r") as file_object:
	content = file_object.read()

with 키워드

'with' 키워드는 코드 블록에 대한 특정 컨텍스트를 설정하고 해제하는 메서드를 정의하는 개체인 컨텍스트 관리자와 함께 사용된다.

'with'문은 필요한 설정 및 정리 작업이 실행되도록 하여 파일 I/O, 소켓 또는 데이터베이스 연결과 같은 리소스 처리를 단순화 한다.

 

with 문이 실행되면 필요한 리소스를 설정하는 컨텍스트 관리자의 _enter_() 메서드를 호출한다. 그러면 with 블록 내부의 코드가 이러한 리소스를 사용할 수 있다. 코드 블록이 완료되면 컨텍스트 관리자의 _exit_() 메서드가 호출되어 필요한 정리 작업을 수행한다.

 

with 키워드의 일반적인 사용 사례는 코드 블록이 실행된 후 자동으로 파일 닫기를 처리하기 때문에 파일 작업이다.

with open("file_name.txt","r") as file_object:
	content = file_object.read()

 

이 예제에서 open() 함수는 컨텍스트 관리자인 파일 객체를 반환한다. with 문은 블록 내에서 예외가 발생하더라도 코드 블록이 실행된 후 파일이 올바르게 닫히도록 한다.

 

또 다른 예는 데이터베이스 연결과 함께 with 문을 사용하는 것이다.

import sqlite3

with sqlite3.connect("example.db") as connection:
	cursor = connection.cursor()
    cursor.execute("CREATE TABLE example (id INTEGER, name TEXT)")
    connection.commit()

 

이 예제에서 sqlite3.connect() 함수는 데이터베이스 연결을 처리하는 컨텍스트 관리자를 반환한다. with 문은 코드블록이 실행된 후 연결이 제대로 닫히도록 한다.

 

with 키워드를 사용하면 리소스 관리를 간소화하고 코드 가독성을 개선하며 부적절한 리소스정리로인한 버그 가능성을 줄일수있다.


CSV(Comma-Separated Values)

Python CSV(쉼표로 구분된 값)는 Python 프로그래밍 언어를 사용하여 CSV 파일로 작업하는 프로세스를 나타낸다. CSV 파일은 테이블 형식 데이터를 저장하고 교환하기 위해 널리 사용되는 데이터 형식이다. CSV 파일의 각 줄은 레코드 또는 데이터 행을 나타내며 값은 쉼표 또는 다른 구분 기호(ex: 탭,세미콜론)로 구분된다. CSV 파일은  Microsoft Excel 또는 Google 스프레드시트와 같은 스프레드시트 소프트웨어로 쉽게 가져올 수 있다.

 

Python은 CSV 파일을 쉽게 읽고 쓸수 있도록 하는 csv라는 내장 라이브러리를 제공한다. CSV라이브러리에는 CSV 데이터를 구조화 되고 효율적인 방식으로 처리하기 위한 다양한 클래스와 함수가 함께 제공된다. 가장 일반적으로 사용되는 csv 라이브러리 구성 요소는 다음과 같다.

  •  csv.reader
    • 이 클래스는 파일 또는 파일과 유사한 객체에서 CSV 데이터를 읽고 파일의 각 행에 대한 값 목록을 생성하는 반복 가능한 객체를 반환한다. 행을 반복하고 필요에 따라 데이터를 처리할 수 있다.
  • csv.writer
    • 이 클래스는 CSV 데이터를 파일 또는 파일류 객체에 기록한다. 각각 단일 행 또는 여러 행의 데이터를 쓰는 writerow() 및 writerows()와 같은 메서드를 제공한다.
  • csv.DictReader
    • 이 클래스는 CSV 데이터를 사전으로 읽는다. 여기서 키는 열 헤더에 해당하고 값은 각 행의 데이터이다. 인덱스 대신 이름으로 열에 엑세스 하려는 경우에 유용하다.
  • csv.DictWriter
    • 이 클래스는 CSV 데이터를 사전으로 작성하여 각 행에 대한 열 헤더 및 해당 데이터를 지정할 수 있다.

다음은 csv 라이브러리를 사용하여 CSV 파일을 읽고 쓰는 예제다

import csv

# Reading a CSV file

with open("input.csv", "r") as csvfile:
	reader = csv.reader(csvfile)
    for row in reader:
    	print(row)
        
# Writing a CSV file
data = [
	["Name", "Age", "City"]
    ["Alice", 30, "New York"],
    ["Bob", 25, "San Francisco"],
]

with open("output.csv", "w") as csvfile:
	writer = csv.writer(csvfile)
    writer.writerows(data)

 

이 예제에서는 먼저 "input.csv" 라는 CSV파일을 읽고 각 행을 인쇄한다. 그런 다음 "output.csv"라는 새 CSV 파일을 만들고 일부 데이터를 쓴다.

 

Python csv 라이브러리를 사용하면 CSV 파일로 쉽게 작업할수 있으므로 체계적이고 효율적인 방식으로 테이블 형식 데이터를 읽고 쓰고 조작할수 있다.


random 라이브러리

Python에서 CSV 데이터를 무작위로 생성하려면 내장 csv 라이브러리와 random 라이브러리를 조합하여 사용할 수 있다. 다음은 임의의 CSV 데이터를 생성하고 파일에 쓰는 방법의 예제다.

import csv
import random
from typing import List


HEADERS = ["Name", "Age", "City"]

NAMES = [
    "Alice", "Bob", "Charlie", "David", "Eve",
    "Frank", "Grace", "Hannah", "Ivan", "Jack",
]

CITIES = [
    "New York", "San Francisco", "Los Angeles", "Chicago", "Houston",
    "Miami", "Boston", "Seattle", "Atlanta", "Denver",
]


def generate_random_rows(num_rows: int) -> List[List[str | int]]:
    """Generate random [name, age, city] rows."""
    rows: List[List[str | int]] = []
    for _ in range(num_rows):
        name = random.choice(NAMES)
        age = random.randint(18, 60)
        city = random.choice(CITIES)
        rows.append([name, age, city])
    return rows


def write_csv(filename: str, headers: List[str], rows: List[List[str | int]]) -> None:
    """Write headers and rows to a CSV file."""

 

이 예제에서는 먼저 열 머리글과 이름 및 도시에 대한 일부 샘플 데이터를 정의한다. 그런 다음 임의의 이름과 도시를 선택하고 임의의 연령을 생성하여 특정 수의 임의 데이터 행(num_rows)을 생성한다. 마지막으로 임의로 생성된 데이터를 "random_data.csv"라는 CSV 파일에 기록한다.

 

필요에 따라 headers, 샘플 데이터 및 num_rows를 조정하여 요구 사항에 따라 다른 임의 CSV 데이터를 생성할 수 있다.


생성된 데이터 출력하기

생성된 데이터를 라인별로 출력하려면 for 루프를 사용하여 data 목록의 행을 반복하고 각 행을 인쇄하면 된다. 다음은 데이터를 한줄씩 인쇄하는 추가 루프가 있는 이전의 예제다.

import csv
import random
from typing import List, Union

HEADERS = ["Name", "Age", "City"]

NAMES = [
    "Alice", "Bob", "Charlie", "David", "Eve",
    "Frank", "Grace", "Hannah", "Ivan", "Jack",
]

CITIES = [
    "New York", "San Francisco", "Los Angeles", "Chicago", "Houston",
    "Miami", "Boston", "Seattle", "Atlanta", "Denver",
]


Row = List[Union[str, int]]


def generate_random_data(num_rows: int) -> List[Row]:
    """Generate random rows of [name, age, city]."""
    data: List[Row] = []
    for _ in range(num_rows):
        data.append([
            random.choice(NAMES),
            random.randint(18, 60),
            random.choice(CITIES),
        ])
    return data


def write_csv(filename: str, headers: List[str], data: List[Row]) -> None:
    """Write headers and data rows to a CSV file."""
    with open(filename, "w", newline="", encoding="utf-8") as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(headers)
        writer.writerows(data)


def print_data(headers: List[str], data: List[Row]) -> None:
    """Print generated data line by line."""
    print("Generated Data:")
    print(", ".join(headers))
    for row in data:
        print(", ".join(map(str, row)))


def main() -> None:
    num_rows = 20
    filename = "random_data.csv"

    data = generate_random_data(num_rows)
    write_csv(filename, HEADERS, data)
    print_data(HEADERS, data)


if __name__ == "__main__":
    main()

 

이 예제에서는 임의의 데이터를 CSV 파일에 쓴 후 for 루프를 사용하여 data 목록의 행을 반복한다. 루프 내에서 join 함수를 사용하여 각 행의 값을 쉼표로 연결하고 각 값을 먼저 문자열로 변환한 다음 결과 문자열을 인쇄한다. 이렇게 하면 해더를 포함하여 생성된 데이터가 한 줄 씩 출력된다.

'Python' 카테고리의 다른 글

[Python] - 객체를 함수로 전달하는 방법  (0) 2026.01.17
[Python] - heap  (0) 2026.01.17
[Python] - 람다(Lambda)  (0) 2026.01.16
[Python] - Tuple  (0) 2026.01.16
[Python] - return value  (0) 2026.01.16