컴퓨터/Python

pandas 시트 전체 list 파일 전체 합치기, 기존 데이터 지우기 openpyxl delete_rows

풍경소리^^ 2023. 10. 23. 13:22

시트합치기

https://www.youtube.com/watch?v=5NBAtp-kTWY&t=484s

import pandas as pd

# sheet_name을 넣지 않게 되면 첫번째 시트를 기본값으로 불러오지만,
# None으로 지정하게 되면 모든 시트를 불러와준다.
data = pd.read_excel("sheetEXAMPLE.xlsx", sheet_name=None)

sheets = list(data.keys())

df = pd.DataFrame([])
for i in sheets:
    df1 = pd.read_excel("sheetEXAMPLE.xlsx", sheet_name=i)
    df1["날짜"] = i
    df = pd.concat([df,df1])

import os.path
import openpyxl as xls

target_file = "result.xlsx"

if os.path.isfile(target_file):
    # openpyxl 엑셀파일 초기화 ##############################################################
    wb = xls.load_workbook(target_file)
    ws = wb["data"]
    if ws["A2"].value != None:
        ws.delete_rows(2, ws.max_row-1) # 제목줄은 그대로 두고, 2행부터 마지막행까지 삭제 (삭제할 행갯수=max_row-제목줄1)
    wb.save(target_file)
    #########################################################################################
    with pd.ExcelWriter(target_file, mode='a', engine='openpyxl', if_sheet_exists='overlay') as w:
        df.to_excel(w, sheet_name='data', index=False, header=False, startrow=1)
else:
    with pd.ExcelWriter(target_file) as w:
        df.to_excel(w, sheet_name='data', index=False, header=True)

파일합치기

https://www.youtube.com/watch?v=bj9N4QLd0hA&t=218s

import pandas as pd
import os.path
import os
import openpyxl

url = "B:/python/jupyternotebook/pandas_엑셀투파이썬/파일합치기/예제압축파일/"

df = pd.DataFrame([])
for j in os.listdir(url):
    # 엑셀파일의 모든 시트를 리스트로 가져오기
    data = pd.read_excel(url+j, sheet_name=None)
    sheets = list(data.keys())
    
    for i in sheets:
        df1 = pd.read_excel(url+j, sheet_name=i)
        df1["날짜"] = i
        df1["지점"] = j.split(".")[0]
        df = pd.concat([df,df1])
target_file = "result_file.xlsx"
if os.path.isfile(target_file):
    # openpyxl 엑셀파일 초기화 ##############################################################
    wb = xls.load_workbook(target_file)
    ws = wb["data"]
    if ws["A2"].value != None:
        ws.delete_rows(2, ws.max_row-1) # 제목줄은 그대로 두고, 2행부터 마지막행까지 삭제 (삭제할 행갯수=max_row-제목줄1)
    wb.save(target_file)
    # openpyxl 엑셀파일 초기화 ##############################################################
    with pd.ExcelWriter(target_file, mode='a', engine='openpyxl', if_sheet_exists='overlay') as w:
        df.to_excel(w, sheet_name='data', index=False, header=False, startrow=1)
else:
    with pd.ExcelWriter(target_file) as w:
        df.to_excel(w, sheet_name='data', index=False, header=True)