CSV 파일 합치기: 프로그램 활용, CMD, Python
빅데이터(?)를 활용하다보면 CSV 파일 여러개(수십, 수백개)로 파일을 받게되는 경우가 많다. 이런 경우 손수 노가다로 CSV 파일을 합치는 이들이 있는데, 파일 형식이 똑같이 생긴 경우 (column이 동일) 에는 자동으로 합칠 수 있는 여러가지 방법이 있다.
1. 프로그램 활용
- 먼저 프로그램을 활용하는 방법이 있다. 엑셀 파일 합치기라는 프로그램이 있어서, 컴퓨터가 익숙하지 않은 분들도 쉽게 이용할 수 있다. 다만 몇번 사용해본 결과 용량이 조금만 커지면 렉이 너무 심하고 멈출때가 많아 끊어서 머지를 해줘야 했다.
2. CMD 활용
파이썬 등을 활용하지 않고도 CMD로 간단하게 CSV를 합칠 수 있다! 이 사실을 모르는 분들이 많은데, 코딩에 익숙하지 않은 분들도 해볼 수 있을 정도로 정말 간단하다.. 다만 인터넷에 나온대로 하면 에러가 뜰 수도 있는데, 여러번 시행착오를 거친 결과 이대로 하면 에러가 뜰 일은 거의 없을 것이다.
1단계) 머지할 파일들은 하나의 폴더에 몰아넣는다.
2단계) 해당 폴더에서 Shift 키를 누른 채로(중요!) 오른쪽 마우스 클릭 -> Powershell창을 연다.
참고로, 여기서 Powershell이 아니라 cmd 창으로 여는 방법도 있는데 관리자로 실행해도 access가 제한되는 경우가 있어 에러가 뜨기도 하므로 Powershell로 여는 것이 가장 편하다.
3단계) 명령어를 입력한다.
type *.csv ; 저장할 폴더 경로\병합파일명.csv
이처럼 하면 된다. 다른 블로그 글들은
type *.csv > merge.csv
이런식으로 하라고 하던데, 그러면 merge.csv 파일이 다시 merge가 되는 파일에 포함되면서 무한 루프에 빠져 끝이 나지 않을수도 있다. 아마 이런 오류를 경험하는 분들이 많을 것이다. 그러므로 맘편하게 다른 폴더 (나는 주로 데스크탑-바탕화면을 이용한다)를 저장경로로 지정해서 저장하는 것을 추천한다.
3. Python 코드 활용
뭐니 뭐니해도 가장 간단한 방법은 파이썬으로 하는 것이다. 판다스 최고.
# glob is a library to find pathnames using regex patterns
import os
import glob
import pandas as pd
os.chdir("file path")
extension = 'csv' #csv로 파일 확장자 지정
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ]) #지정한 파일 경로에 있는 모든 파일 불러오기
#export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
#combined_csv는 병합할 파일명으로 각자 변경하면 된다.
#인코딩을 반드시! 해줘야 한다. 안그러면 깨진다.