개요
파일 처리는 웹 애플리케이션 개발에서 빼놓을 수 없는 핵심 요소입니다. 파이썬은 파일을 생성하고, 읽고, 수정하고, 삭제할 수 있는 다양한 내장 함수를 제공합니다.
이미 존재하는 파일에 데이터를 쓰려면 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()이 가장 간결하고 오류 가능성이 낮은 방법입니다.