Appia의 IT세상

파이썬 [Python] 018 win32com 이용 Excel파일 CSV파일로 저장하기 본문

Python/Python 응용

파이썬 [Python] 018 win32com 이용 Excel파일 CSV파일로 저장하기

Appia 2019. 12. 29. 21:10
반응형

오늘은 엑셀 파일을 CSV 파일로 저장하는 것에 대해서 포스팅 하겠습니다. 우선, 앞선 포스팅에서 win32com 이용하여 엑셀 파일을 제어하는 방법에 대해서 살펴 봤습니다. 하지만, 엑셀 자체가 윈도우라는 운영체제에서 돌아가는 어플리케이션이다 보니, 데이터 양이 많다 보면 상당히 많은 버벅거림이 있습니다.

 

예전에 데이터 양이 Column 40개에 열이 2만줄 정도 되는 데이터를 처리해 하는 경우가 있었습니다. 엑셀 정보를 읽어와서 제가 사용할 툴에서 가공하는 부분이었습니다. 하지만, 데이터를 읽어오는데 걸리는 시간이 거의 40분에서 1시간 정도였습니다.

 

불러오는 중입니다...

 

그래서 제가 생각해 방법이 바로 CSV 파일 형태로 저장하여 파일 입출력을 이용해서 사용하는 것이었습니다. 물론, 몇가지 주의 해야할 점도 있었지만, 속도면에서 상당히 많은 개선이 이루어졌습니다. 데이터 읽어오는 걸리는 시간이 10분도 걸렸습니다.

 

그래서 오늘은 엑셀 파일을 CSV 파일로 저장하는 방법에 대해서 이야기 해보겠습니다. 간단한 예제를 보면서 한번 살펴 보겠습니다. 

 

def save_XLS_CSV(workbook):
    Sheerts = workbook.Worksheets
    for Sheert in Sheerts:
        csvOutFile = Sheert.Name + ".csv"
        Sheert.SaveAs(csvOutFile,42)

excel = win32com.client.Dispatch("Excel.Application")
workbook = excel.Workbooks.Open("test.xsl")
save_XLS_CSV(workbook)

 

엑셀 연결등은 상단에 링크를 참조하셔서 꼭 보기시길 바랍니다. 먼저, 엑셀을 구동시키고, 관련된 파일을 읽어옵니다. 

그런 후에 Worksheets엣에서 각 Sheet들을 돌아다니면서 Sheet 이름으로 저장하는 형태입니다. 가장 핵심적인 부분들은 다음과 같은 부분입니다. 

 

        Sheert.SaveAs(csvOutFile,42)

 

COM API에서 SaveAs 관련해서 각 옵션들이 존재합니다. 두 개의 인자 중 42가 CSV 형태를 의미하는 것입니다. 참고 하시면 좋을 것 같습니다. 

 

다음과 같은 엑셀 파일을 테스트 해보았습니다. (샘플이므로, 임의적으로 만든 예시 입니다.) 

그런 다음과 같은 파일 형태의 CSV 파일이 나타납니다. 

즉 엑셀의 Column부분을 ,(Commna)로 구별하였습니다. 이제부터 CSV 파일 변환을 위해 Excel 파일에 주의 해야할 점들에 대해서 이야기 해보겠습다. 

 

1. 종종 한 셀에 행간문자(줄바꿈)이 존재하지 않아야 합니다. 만약 존재하면 다음과 같은 형태로 글이 나올 수 있습니다. 

물론 이 부분은 필수적인 부분이 아닙니다. 단, 만약 저렇게 된다면 파일 입출력 할 때에 저 부분을 고려해야 하기 떄문에 조금 더 복잡해 질 수 있습니다. 그래서 저의 경우는 완전히 제약 상태로 두고 작업을 했습니다. 물론 돈받고 하는 입장이었기 때문에 관련해서는 행간 문자도 고려해서 결국에 작업을 했었던 것 같습니다. 관련해서는 나중에 조금 더 상세히 포스팅 해볼까 합니다. 

 

2. Sheet 이름의 중복이 없어야 합니다. 각 Sheet 단위로 CSV 파일은 저장이 됩니다. 따라서, Sheet 이름이 중복이 되지 않아야 합니다. 물론 위의 코드를 조금 수정한다면 이 또한 크게 문제는 되지 않을 것 같네요. 

 

예전에 작업했던 코드를 보니, 생각보다는 제약이 많지 않았던 것 같습니다. 요즘은 테스트 데이터 부터 상당히 많은은 데이터를 처리 해야하는 경우가 많다보니, 제가 올린 포스팅이 조금이나마 도움이 되지 않을까 합니다. 혹시 궁금하신 점이나 문의 사항 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

반응형
Comments