-
파이썬 openpyxl을 이용한 엑셀 쓰기카테고리 없음 2018. 11. 2. 22:25
오늘 데이터 가공 때문에 100개정도 되는 폴더를 하나에 병합해야만 했다
해당 파일은 최소 수만에서 최대 20만개의 데이터가 한 row 에 하나씩 있었다.
100개의 파일을 총 100개의 열을 가진 하나의 엑셀파일로 만들어야 했다...
일일히 노가다는 저어어어어어어얼대 하고 싶지 않았다.
뭐..컴터한테 시켜야지
어처피 엑셀을 이용하는 과정은 빈번하게 발생하고 업무 자동화에도 나중에는 눈을 돌려야 할 필요성을 느끼는 찰나에
마침 잘됬다 싶어 모듈을 검색하였다^^ㅎㅎ
파이썬으로
# -*- coding: utf-8 -*- import os from openpyxl import Workbook
openpyxl 이라는 모듈인데
pip install openyxl 을 하면 깔리게 되어있다
엑셀파일에 관련된 모듈인데 사용법이 심플하고
셀별로 지정할 수 있다는 점이 매우 맘에 들어서 선택했다.
os 모듈은 폴더 디렉토리의 파일들을 전부 찾으려고 사용한 모듈이다 .
def excelTest(): path_dir = 'C:\\---\\csv\\' # 가져올 파일들이 있는 directory path file_list = os.listdir(path_dir) # path에 존재하는 파일 목록 가져오기 file_list.sort() fullFilePath = '' fileDic = {} fileIdx = 0 for fileName in file_list: fullFilePath = path_dir + fileName print(fullFilePath) f = open(fullFilePath, 'r', encoding='utf-8') lines = f.readlines() lineList = [] #리스트 선언 for line in lines : lineList.append(line) # lineList에 저장 fileDic[fileIdx] = lineList #key = fileIdx value = lineList fileIdx += 1 # 증가
1. 모든 파일에 접근하여 데이터를 저장해 놓자
os 모듈을 이용해서 폴더 디렉토리의 모든 파일ㅑ을 저장해 놓은뒤
하나하나 접근해서 파이썬 딕셔러니에 저장해놓는다
dic['인덱스' ] = 한개의 파일에 대한 점수들의 리스트
이런식으로 저장을 해놓았다
def xlsxWriter(fileDic): wb = Workbook() fileName = 'sample.xlsx' sheet = wb.active sheet.title = "first_Sheet" for fileIdx in range(1, len(fileDic)): lineList = fileDic[fileIdx] rowIdx = 1 for value in lineList: sheet.cell(row = rowIdx, column = ( fileIdx ) ).value = float(value) rowIdx += 1 wb.save(filename = fileName)
여기서 엑셀파일을 저장하는 모듈을 사용하게 되는데
sheet.cell(row = rowIdx, column = ( fileIdx )).value = float(value)
여기서 몇행 몇열에 무슨 데이터를 넣을지 선택할 수있다
나는 딕셔너리 갯수 만큼 루프를 돌린후에
한 파일의 데이터를 한 열에다 담는 과정을 거쳤다
키값은, 열 값으로도 사용하였다. 나는 이렇게 사용하는 걸 싫어하는데
빠르게 데이터가 요구한 상황이여서..ㅠㅠ (불금이잖아?)
결과는
50메가 정도의 무지막지한 엑셀 파일이 생기게 되었다...
ㅎ.ㅎㅎ만드는 것도 시간이 꽤 걸린다.
뭐 확인용으로 만든거라 그렇게 많은 생각을 거치지 않아 코드가 구리지만..
이번 기회로 이 모듈의 가능성을..좀 보았다
업무 자동화를 꿈꾸는 사람이면 좀 뒤적여봐도 될만할것같다.