ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 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메가 정도의 무지막지한 엑셀 파일이 생기게 되었다...

    ㅎ.ㅎㅎ만드는 것도 시간이 꽤 걸린다.

    뭐 확인용으로 만든거라 그렇게 많은 생각을 거치지 않아 코드가 구리지만..


    이번 기회로  이 모듈의 가능성을..좀 보았다


    업무 자동화를 꿈꾸는 사람이면 좀 뒤적여봐도 될만할것같다.

    댓글

Designed by Tistory.