본문 바로가기
코딩 연습

용량이 큰 엑셀 자료를 텍스트로 변환하는 방법

by good4me 2023. 2. 6.

goodthings4me.tistory.com

여러 시트에 걸쳐 수백만 데이터가 있는 엑셀 자료를 특정 구분자를 주어 텍스트로 변환하는 파이썬 소스 코드임

 

 

대량 데이터 엑셀 자료를 구분자를 주고 텍스트로 변환하는 방법

여러 엑셀 시트에 아래와 같은 동일한 형식의 데이터가 수백만개 있고, 이 엑셀 데이터를 구분자를 주어서 하나의 텍스트 파일로 만들어야 할 경우가 있다. 

엑셀데이터
엑셀데이터

 

import openpyxl

txt_filename = '부동산 주소데이터.txt'
wb = openpyxl.load_workbook('./test/target_excel.xlsx', data_only=True)
maxRow = 0
for shtname in wb.sheetnames:
    ws = wb[shtname]  
    print(f'워크시트: {ws}, 총 행수: {ws.max_row}\n')
    maxRow += ws.max_row

    cnt = 0
    for row in ws[2:ws.max_row]:
        txt_insert = ''
        for col in row:
            # col.value는 <Cell 'Sheet1'.A2> ~ col: <Cell 'Sheet1'.G2> 순차적으로 cols 값이 리턴됨
            if not col.value:  # 엑셀 cell 값이 비어있는 경우
                col.value = ''
            txt_insert += str(col.value) + '$'

        print(txt_insert, '\n')
        cnt += 1
        with open('./test/' + txt_filename, 'a', encoding='utf-8') as f:
            f.write(txt_insert + '\n')
        
        if cnt == 3:
            print(f'\n{shtname} 시트 #{ws.max_row}개 중 {cnt}개 구분자 추가 후 저장 완료\n')
            break

wb.close()
  • openpyxl 모듈을 사용하여 엑셀 시트를 모두 읽고
  • 각 시트에 있는 각 row를 대상으로 다시 column으로 분리한 후
  • 각 셀의 자료에 구분자($)를 주어 하나의 텍스트 데이터로 만들어서 저장한다.

 

good4me.co.kr

 

[실행 결과]

워크시트: <Worksheet "Sheet1">, 총 행수: 43

51637$경상남도 창원시 진해구 자은로88번길 32$경상남도 창원시 진해구 자은동 383$중앙네이빌아파트$경상남도$창원시 진해구$자은동$중
앙네이빌$2004.07.$98$2$10$계단식$개별난방_도시가스$

37659$경상북도 포항시 남구 희망대로514번길 30$경상북도 포항시 남구 대잠동 483-1$이동 힐타운테라스하우스$경상북도$포항시 남구$대 
잠동$이동힐타운테라스하우스$2014.05.$29$2$1$계단식$개별난방_도시가스$

10576$경기도 고양시 덕양구 오금1로 153$경기도 고양시 덕양구 오금동 663-2$삼송자이더빌리지$경기도$고양시 덕양구$오금동$삼송자이더
빌리지(6-1-1BL,도시형)$2021.01.$58$4$1$계단식$개별난방_도시가스$


Sheet1 시트 #43개 중 3개 구분자 추가 후 저장 완료

워크시트: <Worksheet "Sheet2">, 총 행수: 43

04086$서울특별시 마포구 서강로 36$서울특별시 마포구 창전동 148-3$서강문화APT$서울특별시$마포구$창전동$서강문화$1974.11.$18$1$3$ 
계단식$개별난방_도시가스$

44650$울산광역시 남구 거마로 75$울산광역시 남구 신정동 1557-5$푸른아파트$울산광역시$남구$신정동$푸른$1983.12.$18$1$3$계단식$개별
난방_도시가스$

46550$부산광역시 북구 만덕대로155번길 48$부산광역시 북구 덕천동 365-17$파란채$부산광역시$북구$덕천동$파란채(도시형)$2012.12.$18$1$3$계단식$개별난방_도시가스$


Sheet2 시트 #43개 중 3개 구분자 추가 후 저장 완료

워크시트: <Worksheet "Sheet3">, 총 행수: 43

34313$대전광역시 대덕구 신탄진동로48번길 17$대전광역시 대덕구 신탄진동 163-1$대청아파트$대전광역시$대덕구$신탄진동$대청$1980.11.$48$2$3$계단식$개별난방_도시가스$

37747$경상북도 포항시 북구 죽파로 44-6$경상북도 포항시 북구 죽도동 202-6$골든맨션$경상북도$포항시 북구$죽도동$골든맨션$1980.12.$48$2$3$계단식$개별난방_도시가스$

37749$경상북도 포항시 북구 중흥로255번길 33$경상북도 포항시 북구 죽도동 600-2$미주맨션$경상북도$포항시 북구$죽도동$미주$1980.12.$48$2$3$계단식$개별난방_도시가스$


Sheet3 시트 #43개 중 3개 구분자 추가 후 저장 완료

 

위 소스 코드를 실행하면 아래처럼 텍스트 파일이 생성된다.

 

파이썬 코드 실행 결과
파이썬 코드 실행 결과

댓글