여러 개의 텍스트 파일을 하나의 새 파일로 합치는 작업은 파이썬에서 아주 간단하게 처리할 수 있습니다. 기본 원리는 파일 목록을 순회하면서 각 파일의 내용을 읽고, 그 내용을 출력 파일에 차례대로 쓰는 것입니다.
기본 방법: 파일 전체를 한 번에 병합하기
아래 예제는 세 개의 텍스트 파일을 output_file이라는 새 파일로 병합하는 가장 일반적인 방법입니다.
filenames = ['file1.txt', 'file2.txt', 'file3.txt']
with open('output_file', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read())코드 설명
filenames리스트에는 병합하고 싶은 파일들의 이름이 담겨 있습니다.- 바깥쪽
with open('output_file', 'w')는 결과를 저장할 새 파일을 쓰기 모드로 엽니다.with문을 사용하면 작업이 끝난 후 파일이 자동으로 닫히므로 안전합니다. - 안쪽
with open(fname)은 각 입력 파일을 하나씩 열고,infile.read()로 전체 내용을 읽어 출력 파일에 바로 씁니다.
대용량 파일 처리: 한 줄씩 병합하기
파일 크기가 매우 클 경우 read()로 파일 전체를 메모리에 한 번에 불러오는 것은 비효율적일 수 있습니다. 이럴 때는 파일을 한 줄씩 읽어서 출력 파일에 기록하면 메모리 사용량을 크게 줄일 수 있습니다.
filenames = ['file1.txt', 'file2.txt', 'file3.txt']
with open('output_file', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
for line in infile:
outfile.write(line)위 코드는 각 입력 파일을 줄 단위로 순회하며 그대로 출력 파일에 쓰기 때문에, 수백 MB 이상의 대용량 로그 파일이나 데이터 파일을 병합할 때도 안정적으로 동작합니다.
추가 팁
- 바이너리 파일 병합: 이미지나 동영상처럼 텍스트가 아닌 파일을 다룰 때는
open('output_file', 'wb')처럼'rb','wb'모드를 사용해야 합니다. - 줄바꿈 처리: 파일 사이에 구분이 필요하다면
outfile.write('\n')을 추가해 각 파일의 내용 사이에 줄바꿈을 넣을 수 있습니다. - 파일 목록 자동화:
glob.glob('*.txt')를 활용하면 특정 패턴과 일치하는 파일들을 자동으로 찾아 병합할 수 있습니다.
이처럼 파이썬의 with 문과 반복문만 활용하면, 별도의 외부 라이브러리 없이도 여러 파일을 손쉽게 하나의 파일로 병합할 수 있습니다.