Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 여러 파일의 데이터를 하나의 마스터 파일로 통합하는 방법

개요

파일 처리는 웹 애플리케이션 개발에서 빼놓을 수 없는 핵심 요소입니다. 파이썬은 파일을 생성하고, 읽고, 수정하고, 삭제할 수 있는 다양한 내장 함수를 제공합니다.

이미 존재하는 파일에 데이터를 쓰려면 open() 함수에 아래와 같은 모드 매개변수를 지정해야 합니다.

  • "a" – Append(추가): 파일의 끝에 새로운 내용을 덧붙입니다.
  • "w" – Write(쓰기): 기존 내용을 모두 지우고 새로 기록합니다.

예제 1: os 모듈로 여러 파일 병합하기

아래 예제는 한 디렉터리에 있는 여러 직원 데이터 파일(emp_1.txt, emp_2.txt 등)을 읽어 하나의 master.txt로 통합하는 과정을 보여줍니다. 실행 전에 대상 파일이 이미 존재하는지 확인해 삭제함으로써, 데이터가 기존 파일에 중복으로 누적되는 문제를 방지합니다.

import os

# 디렉터리 내 파일 목록 조회
lis = os.listdir('D:/python/data_files/data_files')
print(lis)
tgt = os.listdir('D:/python/data_files/target_file')
file_dir = 'D:/python/data_files/data_files'
out_file = 'D:/python/data_files/target_file/master.txt'
ct = 0
print('target file :', tgt)
try:
    # 대상 파일이 존재하면 삭제
    # (삭제하지 않으면 기존 파일에 데이터가 계속 추가됨)
    if len(tgt) > 0:
        os.remove('D:/python/data_files/target_file/master.txt')
        open(out_file, 'a').close()
    else:
        # 빈 파일 생성
        open(out_file, 'a').close()
except:
    head = open(out_file, 'a+')
    line = 'empno, ename, sal'
    # 헤더를 출력 파일에 기록
    head.write(line)
    head.close()
    # 각 입력 파일의 데이터를 출력 파일에 기록하는 루프
    for line1 in lis:
        f_dir = file_dir + '/' + line1
        # 입력 파일을 읽기 모드로 열기
        in_file = open(f_dir, 'r+')
        # 출력 파일을 추가 모드로 열기
        w = open(out_file, 'a+')
        d = in_file.readline()   # 첫 줄(헤더) 건너뛰기
        d = in_file.readlines()  # 나머지 데이터 줄 읽기
        w.write("\n")
        for line2 in d:
            print(line2)
            w.write(line2)
        ct = ct + 1
    w.close()

각 소스 파일의 첫 번째 줄(헤더)은 readline()으로 건너뛰고, 실제 데이터만 readlines()로 읽어 마스터 파일에 이어 붙입니다. 변수 ct는 처리된 파일의 개수를 셀 때 활용할 수 있습니다.

예제 2: pandas로 더 간결하게 처리하기

os 모듈 방식보다 훨씬 짧고 안전하게 처리하려면 pandas 라이브러리를 사용하는 것이 좋습니다.

import pandas as pd

# pd.read_csv는 파일을 DataFrame으로 읽어 들임
df1 = pd.read_csv('D:/python/data_files/data_files/emp_1.txt')
df2 = pd.read_csv('D:/python/data_files/data_files/emp_2.txt')
df3 = pd.read_csv('D:/python/data_files/data_files/emp_3.txt')
frames = [df1, df2, df3]
# concat 함수로 여러 DataFrame을 하나로 연결
result = pd.concat(frames)
# to_csv 함수로 결과를 파일에 저장
result.to_csv('D:/python/data_files/target_file/master.txt', encoding='utf-8', index=False)

read_csv()로 각 파일을 DataFrame으로 불러온 뒤 concat()으로 세로 방향으로 연결하고, to_csv()로 최종 파일을 저장합니다. index=False 옵션을 지정하면 불필요한 인덱스 열이 함께 저장되지 않습니다.

핵심 정리

  • 파일에 내용을 이어 쓰려면 "a" 모드, 기존 내용을 덮어쓰려면 "w" 모드를 사용합니다.
  • 디렉터리 안의 여러 파일을 순차적으로 처리할 때는 os.listdir()과 반복문을 활용합니다.
  • CSV·텍스트 형태의 대량 데이터를 병합할 때는 pandas의 concat()이 가장 간결하고 오류 가능성이 낮은 방법입니다.