목차
파일 합치기, 왜 필요할까요
업무를 하다 보면 비슷한 내용의 텍스트 파일이 여러 개 생성되는 경우가 많습니다. 예를 들어, 웹 스크래핑으로 수집한 데이터, 일일 보고서, 회의록 등이 각기 다른 파일로 나뉘어 저장될 수 있죠. 이렇게 여러 파일로 흩어진 정보를 한눈에 파악하고 관리하는 것은 여간 번거로운 일이 아닙니다. 이럴 때, Python을 활용하여 이 모든 텍스트 파일을 하나의 파일로 깔끔하게 합칠 수 있다면 얼마나 효율적일까요? 반복적인 파일 작업을 자동화하여 시간을 절약하고, 데이터의 일관성을 유지하며, 검색 및 분석의 편의성을 높일 수 있습니다. 이번 글에서는 Python을 이용하여 지정된 폴더 안에 있는 모든 텍스트 파일을 손쉽게 하나의 파일로 병합하는 방법을 단계별로 알아보겠습니다.
텍스트 파일 합치기는 단순히 여러 개의 파일을 하나로 묶는 것을 넘어, 데이터를 효율적으로 관리하고 활용하기 위한 기본적인 자동화 작업입니다. 복잡한 코드를 사용하지 않고도 Python의 기본 라이브러리만으로 충분히 구현 가능하므로, 코딩 경험이 많지 않은 분들도 쉽게 따라 하실 수 있습니다.
| 작업 | 수작업 시 | Python 자동화 시 |
|---|---|---|
| 시간 소요 | 수십 분 ~ 수 시간 | 몇 초 |
| 정확도 | 오타, 누락 발생 가능성 높음 | 매우 높음 |
| 반복 작업 | 매번 동일한 수고 반복 | 한 번 설정 후 반복 실행 용이 |

Python 코드로 텍스트 파일 합치기
이제 본격적으로 Python 코드를 사용하여 폴더 내의 텍스트 파일들을 합치는 방법을 살펴보겠습니다. 이 과정은 크게 세 단계로 나눌 수 있습니다. 첫째, 합칠 파일들이 들어있는 폴더를 지정하는 것입니다. 둘째, 해당 폴더에서 모든 텍스트 파일(`.txt` 확장자를 가진 파일)을 찾아 목록으로 만드는 것입니다. 셋째, 찾은 파일들을 순서대로 읽어 새로운 하나의 파일에 내용을 이어 쓰는 과정입니다. Python의 `os` 모듈과 파일 입출력 기능을 활용하면 이 모든 과정을 간단하게 처리할 수 있습니다.
특히, `os.listdir()` 함수를 사용하여 폴더 내의 모든 파일과 디렉토리 이름을 가져오고, `endswith('.txt')` 조건을 사용하여 텍스트 파일만 필터링하는 것이 핵심입니다. 이렇게 걸러진 파일들을 `sorted()` 함수로 정렬하면 일관된 순서로 파일 내용을 병합할 수 있습니다.
▶ 1단계: 필요한 라이브러리 임포트 및 변수 설정
▶ 2단계: 폴더 내 텍스트 파일 목록 생성 및 정렬
▶ 3단계: 각 파일 내용을 읽어 새로운 파일에 쓰기

고급 설정 및 주의사항
기본적인 텍스트 파일 합치기 기능 외에도 몇 가지 고급 설정을 추가하거나 주의사항을 염두에 둔다면 더욱 완성도 높은 스크립트를 만들 수 있습니다. 예를 들어, 합쳐질 파일들의 순서를 단순히 파일명 알파벳 순서가 아닌, 특정 기준으로 정렬하고 싶을 때가 있을 수 있습니다. 이때는 `sorted()` 함수에 `key` 인자를 활용하여 사용자 정의 정렬 기준을 적용할 수 있습니다. 또한, 합치는 과정에서 특정 파일을 제외하고 싶거나, 빈 줄을 제거하는 등의 전처리 작업을 추가할 수도 있습니다.
무엇보다 중요한 것은, 스크립트를 실행하기 전에 원본 파일을 백업해 두는 습관입니다. 만약 코드에 오류가 있거나 예상치 못한 결과가 발생했을 때, 원본 데이터가 손실되는 것을 방지할 수 있습니다. 또한, 대용량 파일이나 수많은 파일을 다룰 때는 메모리 사용량이나 처리 시간을 고려해야 할 수도 있습니다. `with open(...)` 구문을 사용하여 파일을 안전하게 열고 닫는 것을 항상 유의해야 하며, 인코딩 문제(예: UTF-8)를 고려하여 파일 입출력을 수행하는 것이 좋습니다.
핵심 포인트: 파일 인코딩 (encoding='utf-8') 설정은 한글 등 다양한 문자가 포함된 파일을 합칠 때 오류를 방지하는 데 매우 중요합니다. 또한, 파일 이름에 날짜 정보가 포함된 경우, 날짜 순서대로 정렬하여 병합하는 것이 논리적으로 유용할 수 있습니다.
| 항목 | 설명 |
|---|---|
| 파일 필터링 | `os.listdir()`와 `.endswith('.txt')`를 사용하여 `.txt` 파일만 선택합니다. |
| 파일 정렬 | `sorted()` 함수로 파일명을 알파벳 순서로 정렬하여 병합 순서를 정합니다. |
| 인코딩 | `encoding='utf-8'` 옵션을 사용하여 다양한 문자 처리에 대비합니다. |
| 안전한 파일 처리 | `with open(...)` 구문을 사용하여 파일 누수나 데이터 손실을 방지합니다. |
코드 작성 시작하기
이제 본격적으로 Python 코드를 작성할 차례입니다. 가장 먼저 해야 할 일은 필요한 모듈을 불러오는 것입니다. 이 작업을 위해 `os` 모듈과 `glob` 모듈을 사용할 것입니다. `os` 모듈은 파일 및 디렉토리와 상호 작용하는 데 유용하며, `glob` 모듈은 특정 패턴과 일치하는 파일 경로를 찾는 데 도움을 줍니다. 코드의 맨 위쪽에 다음과 같이 import 문을 추가해주세요. 이 과정은 파일 시스템을 탐색하고 원하는 텍스트 파일을 쉽게 찾을 수 있도록 기반을 마련합니다. Python은 이러한 모듈 덕분에 파일 작업을 매우 간결하게 처리할 수 있습니다.
▶ 1단계: 필요한 모듈 import
▶ 2단계: 텍스트 파일이 있는 폴더 경로 설정
▶ 3단계: 합쳐진 내용을 저장할 파일 경로 설정
핵심 포인트: `os`와 `glob` 모듈을 임포트하는 것을 잊지 마세요. 이 모듈들은 파일 탐색 및 관리에 필수적입니다.
파일 내용 읽고 합치기
이제 폴더 내의 모든 텍스트 파일을 실제로 읽어서 하나의 파일로 합치는 로직을 구현해야 합니다. `glob` 모듈을 사용하여 특정 확장자(`.txt`)를 가진 파일 목록을 가져올 수 있습니다. 이 목록을 순회하면서 각 파일을 열고 그 내용을 읽어옵니다. 읽어온 내용은 새로운 파일에 순차적으로 쓰여지게 됩니다. 이 과정에서 중요한 것은 파일 인코딩입니다. 대부분의 텍스트 파일은 UTF-8 인코딩을 사용하지만, 혹시 모를 다른 인코딩에 대비하여 `errors='ignore'` 옵션을 추가하여 예상치 못한 문자로 인한 오류를 방지할 수 있습니다. 이렇게 하면 다양한 형식의 텍스트 파일도 안전하게 처리할 수 있습니다.
| 함수/모듈 | 역할 |
|---|---|
| os.listdir() | 지정된 경로의 모든 파일 및 디렉토리 목록을 가져옵니다. |
| glob.glob() | 특정 패턴과 일치하는 파일 경로 목록을 반환합니다. (예: '*.txt') |
| open() | 파일을 열고 읽거나 쓸 수 있게 해줍니다. |
실행 및 결과 확인
이제 작성한 Python 스크립트를 실행할 시간입니다. 코드를 저장하고 터미널이나 IDE에서 실행하면, 지정된 폴더 안에 있던 모든 텍스트 파일의 내용이 하나로 합쳐져 지정한 출력 파일에 저장될 것입니다. 실행 후에는 결과 파일을 열어 모든 내용이 문제없이 통합되었는지 확인하는 것이 중요합니다. 만약 예상과 다른 결과가 나온다면, 코드의 경로 설정이 올바른지, 파일 인코딩 문제가 없는지 등을 다시 한번 점검해보세요. 텍스트 파일 합치기 작업은 단순해 보이지만, 파일 경로, 인코딩, 오류 처리 등 여러 요소를 고려해야 성공적으로 완료할 수 있습니다. 이 스크립트를 통해 반복적인 파일 작업을 효율적으로 처리하는 방법을 익힐 수 있을 것입니다.
▶ 1단계: Python 스크립트 실행
▶ 2단계: 결과 파일 확인
▶ 3단계: 필요한 경우 코드 수정 및 재실행
핵심 포인트: 스크립트 실행 후 결과 파일의 내용을 꼼꼼히 확인하여 모든 텍스트가 정확하게 합쳐졌는지 검증하는 것이 중요합니다.
파일 합치기 핵심 함수 이해하기
Python으로 여러 텍스트 파일을 하나의 파일로 합치는 과정은 생각보다 간단합니다. 핵심은 os 모듈을 사용하여 폴더 내 파일 목록을 가져오고, open 함수를 반복적으로 사용하여 각 파일의 내용을 읽어와 새로운 파일에 쓰는 것입니다. 먼저, 대상 폴더의 경로를 지정하고 해당 폴더 안에 있는 모든 파일의 이름을 가져와야 합니다. 이때, os.listdir() 함수를 활용하면 폴더 내의 모든 파일과 하위 폴더 이름을 리스트 형태로 얻을 수 있습니다. 이 리스트에서 텍스트 파일(.txt)만을 걸러내는 추가적인 필터링 과정이 필요합니다. 이렇게 선별된 텍스트 파일들을 순서대로 열어 그 내용을 모두 읽어온 뒤, 미리 준비된 하나의 출력 파일에 차례대로 덧붙이는 방식으로 진행됩니다. 이 과정에서 파일 인코딩 문제에 주의해야 하며, 일반적으로 UTF-8 인코딩을 사용하는 것이 안전합니다. Python의 강력한 파일 처리 기능 덕분에 복잡한 코딩 없이도 효율적으로 여러 파일을 병합할 수 있습니다.
어떤 종류의 텍스트 파일들을 합칠 수 있는지, 그리고 각 파일의 형식에 따라 어떤 점을 유의해야 하는지에 대한 정보를 표로 정리해 보았습니다.
| 파일 종류 | 주요 특징 및 고려사항 |
|---|---|
| 일반 텍스트 파일 (.txt) | 가장 기본적인 형태로, 별다른 제약 없이 합칠 수 있습니다. 인코딩 방식(UTF-8 권장)만 일치시키면 됩니다. |
| CSV 파일 (.csv) | 쉼표로 구분된 데이터 파일로, 헤더(첫 줄)를 포함할지 여부를 결정해야 합니다. 첫 번째 파일의 헤더만 포함하는 것이 일반적입니다. |
| 로그 파일 (.log) | 시간 정보 등이 포함된 경우가 많습니다. 파일 순서대로 합치는 것이 로그의 흐름을 파악하는 데 중요합니다. |
코드 구현 상세 단계
실제 Python 코드를 작성하는 과정을 단계별로 살펴보겠습니다. 먼저, 필요한 라이브러리인 os를 임포트하는 것으로 시작합니다. 그다음, 모든 텍스트 파일이 모여 있는 소스 폴더의 경로와, 합쳐진 내용을 저장할 최종 출력 파일의 경로를 변수로 지정합니다. os.listdir() 함수를 이용해 소스 폴더 안의 파일 목록을 얻은 후, 각 파일 이름이 '.txt'로 끝나는지 확인하는 조건문을 통해 텍스트 파일만 필터링합니다. 이 과정에서 생성된 텍스트 파일 목록은 새로운 리스트에 저장됩니다. 이제, 모든 텍스트 파일을 순회하면서 각 파일을 읽기 모드('r')로 열고, 그 내용을 read() 메소드를 사용하여 문자열로 가져옵니다. 이렇게 읽어온 내용은 출력 파일을 쓰기 모드('w' 또는 'a')로 열어 write() 메소드를 이용해 씁니다. 만약 파일들이 이미 존재하는데 덮어쓰고 싶지 않다면, 'a'(append) 모드를 사용하여 파일의 끝에 내용을 추가하는 방식을 선택할 수 있습니다. 각 파일을 읽고 쓸 때 발생할 수 있는 오류를 처리하기 위해 try-except 구문을 사용하는 것이 좋습니다. 또한, 각 파일의 내용을 합칠 때, 파일 사이에 구분선을 넣어주면 나중에 내용을 구분하기 편리합니다. 예를 들어, 각 파일 내용 끝에 새로운 줄 문자인 \n이나 특정 문자열을 추가하는 방식으로 구분할 수 있습니다.
효과적인 코드 구현을 위한 단계별 절차는 다음과 같습니다.
▶ 1단계: 필요한 라이브러리 임포트 및 폴더 경로 설정
▶ 2단계: 대상 폴더 내 텍스트 파일 목록 추출 및 필터링
▶ 3단계: 각 텍스트 파일을 읽어 하나의 출력 파일에 순차적으로 쓰기
▶ 4단계: 파일 처리 중 발생할 수 있는 예외 처리 및 결과 확인
주의사항 및 활용 팁
Python으로 텍스트 파일을 합치는 과정은 비교적 간단하지만, 몇 가지 주의사항을 염두에 두어야 합니다. 첫째, 파일 인코딩 문제입니다. 서로 다른 인코딩으로 저장된 파일을 합칠 경우, 문자 깨짐 현상이 발생할 수 있습니다. 따라서 합치기 전에 모든 파일의 인코딩을 통일하는 것이 가장 좋으며, 이를 위해 encoding='utf-8' 옵션을 open() 함수에 명시해 주는 것이 일반적입니다. 둘째, 파일 순서의 중요성입니다. 로그 파일이나 순서가 중요한 데이터의 경우, 파일 이름을 기준으로 알파벳 또는 숫자가 빠른 순서대로 합쳐지므로, 파일 이름 자체를 순서를 고려하여 지어두는 것이 좋습니다. 예를 들어, 'log_001.txt', 'log_002.txt'와 같이 네이밍하면 원하는 순서대로 합칠 수 있습니다. 셋째, 너무 큰 파일을 합칠 때는 메모리 사용량에 주의해야 합니다. 파일을 한 번에 통째로 읽어오는 대신, 줄 단위로 읽어와 쓰는 방식을 사용하면 메모리 부담을 줄일 수 있습니다. 또한, 스크립트 실행 전에는 반드시 백업을 해두는 습관을 들이는 것이 안전합니다. 이 기능은 단순히 텍스트 파일뿐만 아니라, HTML, CSS, JavaScript 등 다양한 유형의 코드를 모아 하나의 프로젝트 파일로 관리하거나, 여러 개의 데이터 로그 파일을 취합하여 분석하는 등 다양한 분야에서 활용될 수 있는 유용한 스크립트입니다.
이러한 점들을 고려하여 효율적인 파일 합치기 스크립트를 작성하고 활용하시길 바랍니다.
핵심 요약
• 파일 인코딩(UTF-8 권장)을 통일하고, 파일 순서를 고려한 네이밍을 사용하세요.
• 대용량 파일 합칠 때는 메모리 효율성을 위해 줄 단위로 처리하는 방식을 고려하세요.
• 스크립트 실행 전에는 반드시 대상 파일의 백업을 진행하는 것이 안전합니다.
주요 질문 FAQ
Q. Python 스크립트로 텍스트 파일들을 합칠 때, 각 파일의 내용 사이에 줄바꿈이 자동으로 추가되나요?
기본적으로 Python 스크립트에서 파일을 열고 내용을 읽어 합치는 과정에서 각 파일 내용 끝에 줄바꿈 문자가 포함되어 있다면, 합쳐진 파일에도 해당 줄바꿈이 유지됩니다. 만약 파일 끝에 줄바꿈이 없는 경우, 마지막 파일 내용 뒤에 명시적으로 줄바꿈을 추가해주어야 합니다. 또한, 각 파일의 내용을 합치기 전에 새로운 줄바꿈 문자를 추가하여 구분해줄 수도 있습니다.
Q. 합치고 싶은 텍스트 파일들이 특정 폴더에 모두 들어있는데, 해당 폴더만 지정해주면 되나요?
네, 맞습니다. Python 스크립트에서 `os` 모듈이나 `glob` 모듈을 사용하면 특정 폴더 내의 모든 파일을 쉽게 찾을 수 있습니다. 이 방법을 활용하면 사용자가 직접 파일 목록을 일일이 지정하지 않고, 대상 폴더 경로만 정확히 지정해주면 해당 폴더 안에 있는 모든 텍스트 파일들을 대상으로 작업을 수행할 수 있습니다.
Q. 합쳐진 텍스트 파일의 내용을 어떻게 저장할지, 출력 파일 이름을 어떻게 설정할 수 있나요?
Python 스크립트에서 파일 내용을 쓸 때는 `open()` 함수를 사용하여 새로운 파일을 생성하고 'w' (쓰기) 모드로 엽니다. 이때 파일 이름을 지정해주면 됩니다. 예를 들어, `with open('합쳐진_파일.txt', 'w', encoding='utf-8') as outfile:`와 같이 작성하면 '합쳐진_파일.txt'라는 이름으로 내용이 저장됩니다. 원하는 파일 이름으로 자유롭게 설정하시면 됩니다.
Q. 만약 폴더 안에 텍스트 파일이 아닌 다른 종류의 파일(예, 이미지, PDF)이 섞여 있다면 어떻게 해야 하나요?
텍스트 파일만 대상으로 합치고 싶다면, 파일을 읽어올 때 파일 확장자를 확인하는 조건을 추가해주면 됩니다. 예를 들어, `if file_name.endswith('.txt'):`와 같은 조건을 사용하여 `.txt` 확장자를 가진 파일만 처리하도록 스크립트를 수정할 수 있습니다. 이렇게 하면 다른 종류의 파일은 자동으로 제외됩니다.
Q. 합치는 텍스트 파일들의 인코딩이 다를 경우 오류가 발생하나요? 해결 방법이 있나요?
네, 인코딩이 다르면 오류가 발생할 수 있습니다. 일반적으로 텍스트 파일을 읽고 쓸 때는 `encoding='utf-8'`과 같이 인코딩을 명시해주는 것이 좋습니다. 만약 여러 인코딩 방식의 파일이 섞여 있다면, 각 파일을 읽어올 때 해당 파일의 인코딩을 파악하거나, `try-except` 구문을 사용하여 여러 인코딩 시도를 해보는 방식으로 오류를 처리할 수 있습니다.
Q. 합치고 싶은 텍스트 파일들의 순서를 임의로 정할 수 있나요? 아니면 파일 이름 순서대로 합쳐지나요?
기본적으로 `os.listdir()` 함수 등을 사용하면 운영체제에 따라 파일이 정렬되는 순서가 다를 수 있습니다. 파일 이름 순서대로 합치고 싶다면, 파일 목록을 얻은 후에 `sorted()` 함수를 사용하여 명확하게 알파벳 순서로 정렬한 뒤 처리하는 것이 좋습니다. 만약 특정 기준(예: 날짜, 번호)으로 정렬하고 싶다면, 해당 기준에 맞는 함수나 로직을 추가하여 파일을 정렬해야 합니다.
Q. 폴더 내에 있는 모든 텍스트 파일을 하나의 파일로 합치는 파이썬 코드를 직접 작성해야 하나요, 아니면 이미 있는 라이브러리를 사용할 수 있나요?
Python의 내장 모듈인 `os`와 `glob`를 활용하면 별도의 외부 라이브러리 설치 없이도 쉽게 폴더 내 파일 목록을 얻고 특정 확장자 파일을 필터링할 수 있습니다. 또한, 파일 읽기/쓰기는 기본적인 `open()` 함수를 사용하므로, 이들만으로도 충분히 원하는 기능을 구현할 수 있습니다. 복잡한 고급 기능을 원하지 않는다면, 표준 라이브러리만으로도 충분히 해결 가능합니다.
Q. 합쳐진 텍스트 파일의 크기가 매우 클 경우, 메모리 문제가 발생할 수 있나요? 안전하게 처리하는 방법이 있나요?
매우 큰 파일을 처리할 경우 메모리 부족 문제가 발생할 수 있습니다. 이를 방지하기 위해 파일을 한 번에 전부 읽어오는 대신, 각 파일을 줄 단위로 읽거나, 파일 크기를 분할하여 조금씩 읽고 쓰는 방식을 사용할 수 있습니다. 예를 들어, `with open(...) as infile: for line in infile:`와 같이 반복문을 사용하면 파일 전체를 메모리에 올리지 않고도 처리할 수 있습니다.