본문 바로가기
Data Science

파이썬을 이용한 엑셀 파일 합치기

by 호기심 많은 직장인 2022. 6. 2.
728x90
728x90

안녕하세요, 여러분!

오늘은 제가 일하면서 불편했던 점을 파이썬으로 해결할 수 있는 방법에 대해서 가져왔답니다ㅎㅎㅎ

 

바로바로, 여러 엑셀파일 합치기

엑셀이 행의 수가 많으면 열기도 힘들고 이걸 일일이 합치려면....고생을 엄청 해야했다.

하지만, 내가 누군가. 이런건 바로바로 손쉽게 할 수 있는 방법을 찾는다.

간단하게 공유해드릴게요!!!

import pandas as pd
import numpy as np
import xlrd

합치기

path = 'C:/Users/ASUS/Desktop/최종/새 폴더/' # csv파일들이 있는 디렉토리 위치
merge_path = f"C:/Users/ASUS/Desktop/최종/새 폴더/result.csv" # 병합하고 저장하려는 파일명


file_list = glob.glob(path + '*')

with open(merge_path, 'w') as f: # 2-1.merge할 파일을 열고 
    for i, file in enumerate (file_list): 
        if i ==0: ### 처음 파일은 헤더 포함해서 write 
            with open(file, 'r', encoding="utf_8") as f2: 
                while True: 
                    line = f2.readline() # 2.merge 대상 파일의 row 1줄을 읽어서 

                    if not line: # row가 없으면 해당 csv 파일 읽기 끝 
                        break 

                    f.write(line) # 3.읽은 row 1줄을 merge할 파일에 쓴다. 

            file_name = file.split('\\')[-1] 
            print(file.split('\\')[-1] + ' write complete...') 

        else: 
            with open(file, 'r',encoding="utf_8") as f2: 
                n = 0 #csv 파일의 row를 체크하기 위한 변수 
                while True: 
                    line = f2.readline() # 2.merge 대상 파일의 row 1줄을 읽어서 
                    if n != 0: # 첫번째 row(헤더)를 제외한 
                        f.write(line) # 3.읽은 row 1줄을 merge할 파일에 쓴다. 

                    if not line: # row가 없으면 해당 csv 파일 읽기 끝 
                        break 

                    n += 1 

            file_name = file.split('\\')[-1] 

        print(file.split('\\')[-1] + ' write complete...') 
print('>>> All file merge complete...')

여러폴더 여러파일 하나로 합치기

for y in [1,15]:
    
    for k in [1,2,3,4]:
        path = f'C:/Users/ASUS/Desktop/최종/새 폴더 ({y})/새 폴더 ({k})/' # csv파일들이 있는 디렉토리 위치    
        merge_path = f"C:/Users/ASUS/Desktop/최종/새 폴더 ({y})/새 폴더 ({k})/result.csv" # 병합하고 저장하려는 파일명


        file_list = glob.glob(path + '*')

        with open(merge_path, 'w') as f: # 2-1.merge할 파일을 열고 
            for i, file in enumerate (file_list): 
                if i ==0: ### 처음 파일은 헤더 포함해서 write 
                    with open(file, 'r', encoding="utf_8") as f2: 
                        while True: 
                            line = f2.readline() # 2.merge 대상 파일의 row 1줄을 읽어서 

                            if not line: # row가 없으면 해당 csv 파일 읽기 끝 
                                break 

                            f.write(line) # 3.읽은 row 1줄을 merge할 파일에 쓴다. 

                    file_name = file.split('\\')[-1] 
                    print(file.split('\\')[-1] + ' write complete...') 

                else: 
                    with open(file, 'r',encoding="utf_8") as f2: 
                        n = 0 #csv 파일의 row를 체크하기 위한 변수 
                        while True: 
                            line = f2.readline() # 2.merge 대상 파일의 row 1줄을 읽어서 
                            if n != 0: # 첫번째 row(헤더)를 제외한 
                                f.write(line) # 3.읽은 row 1줄을 merge할 파일에 쓴다. 

                            if not line: # row가 없으면 해당 csv 파일 읽기 끝 
                                break 

                            n += 1 

                    file_name = file.split('\\')[-1] 
    
                print(file.split('\\')[-1] + ' write complete...') 
        print('>>> All file merge complete...')
728x90
728x90

댓글