본문 바로가기
공부 목록/IT & 프로그래밍

파이썬에서 암호화된 엑셀 파일을 포함한 여러 방법 정리

by 독학박사 2024. 8. 5.

목차


    파이썬은 데이터 분석으로 많이 활용됩니다. 회사에서 데이터 분석을 위해 엑셀 파일의 데이터를 파이썬에서 읽어야 하는 경우가 있습니다. 삼성과 같은 대기업의 경우 파일이 암호화가 돼 있어 파이썬에서 호출 시 일반적인 방법으로 어려울 수 있습니다. 파이썬에서 암호화된 엑셀 파일은 물론 다양한 라이브러리에 대한 설명을 정리합니다.

     

    보안 엑셀을 위한 xlwings 라이브러리
    보안 엑셀을 위한 xlwings 라이브러리

     

     

     

    Pandas 라이브러리 사용

    'Pandas'는 데이터 분석에 꼭 필요한 파이썬의 라이브러리로, 엑셀 파일을 읽고 쓰는 기능도 포함하고 있습니다. pandas 라이브러리를 사용하게 되면 자동으로 dataframe 형태로 데이터를 사용할 수 있습니다.

     

    우선적으로 판다스를 사용하기 위해 판다스를 설치해야 합니다.

     

    pip install pandas

     

    엑셀 파일을 열기 위해서는 파이썬 코드에 판다스 라이브러리를 호출하고 해당 라이브러리를 이용해 엑셀 파일을 읽어 들입니다.

     

    파일이 스크립트와 같은 경로에 있다면 '\\파일경로\\' 부분이 필요 없습니다.(vscode 기준) 파이썬 스크립트와 다른 경로에 있다면 꼭 경로와 함께 파일명을 작성해야 합니다.

     

    xlsx 파일이 아닌 csv 파일일 경우 pd.read_csv를 사용해 주세요. 특정 시트를 열고 싶다면 sheet_name 인자를 사용합니다.

     

    import pandas as pd
    
    df = pd.read_excel('\\파일경로\\파일명.xlsx')
    
    df = pd.read_excel('\\파일경로\\파일명.xlsx', sheet_name='시트이름')

     

    여러 개의 시트를 열어서 데이터로 저장하고 싶다면 sheet_name 인자에 배열로 인자값을 입력합니다. dfs는 배열의 형태를 갖고 호출 시에는 인덱싱으로 하게 됩니다.

     

    dfs = pd.read_excel('\\파일경로\\파일명.xlsx', sheet_name=['시트1', '시트2'])
    print(dfs['시트1'])
    print(dfs['시트2'])

     

     

    Openpyxl 라이브러리 사용

    'openpyxl'은 엑셀 파일을 읽고 쓰기 위해 만들어진 라이브러리입니다. 먼저 'openpyxl'을 설치합니다.

     

    pip install openpyxl

     

    openpyxl 라이브러리를 이용하여 엑셀 데이터를 읽고 첫 번째 행을 데이터 프레임 헤더로 사용하는 코드는 다음과 같습니다.

     

    import pandas as pd
    from openpyxl import load_workbook
    
    # 엑셀 파일 열기
    file_path = '//파일경로//'
    file_name = '파일명.xlsx'
    wb = load_workbook(file_path + file_name)
    ws = wb.active
    
    # 시트의 모든 데이터를 리스트로 변환
    data = list(ws.values)
    
    # 첫 번째 행을 데이터프레임의 헤더로 사용
    df = pd.DataFrame(data[1:], columns=data[0])

     

    'wb'는 파일을 연 값을 갖고 있으며 'ws'는 'actve' 속성을 사용하여 활성화된 시트를 선택하게 됩니다.

     

    'data'는 데이터 프레임으로 변환하기 전 'ws.values' 제너레이터를 리스트로 변환된 데이터입니다. 이렇게 되면 각 행은 튜플로 저장됩니다.

     

    'data[1:]'는 데이터프레임을 만들 때 1행을 제외한 데이터를 데이터프레임으로 하고, colums=data[0]으로 데이터의 첫 번째 행을 데이터프레임의 칼럼 헤더로 사용한다는 겁니다.

     

     

    xlwings 라이브러리 사용

    회사에서 암호화된(보안 잠금) 엑셀 파일을 열기 위해 해당 라이브러리를 사용할 수 있습니다. 데이터프레임으로 만드는 방법까지 설명하도록 하겠습니다.

     

    해당 라이브러리 사용을 위해 라이브러리 설치부터 진행합니다.

     

    pip install xlwings

     

    우선, 보안 잠금된 엑셀 파일을 데이터프레임으로 저장하는 코드를 모두 작성해 보겠습니다.

     

    import pandas as pd
    import xlwings as xw
    
    file_path = '\\파일경로\\'
    file_name = '파일명.xlsx'
    
    # 파일을 읽을 때 엑셀을 실행하지 않음
    app = xw.App(visible = False)
    
    # 엑셀 파일 열기
    book = xw.Book(file_path + file_name)
    
    # 읽어들인 데이터를 데이터프레임으로 변환
    data = book.sheest(1).used_range.options(pd.Dataframe, index-False)

     

    app 변수가 있는 구문을 사용하지 않으면 프로그램 실행 시마다 '파일명.xlsx' 파일이 엑셀에서 실행되기 때문에 'visible=False'를 사용해 줍니다.

     

    book 제너레이터를 데이터프레임으로 변환하기 위해 used_range.options을 사용합니다.

     

     

    마치며

    지금까지 파이썬에서 엑셀 데이터를 읽기 위해 3개의 라이브러리 사용 설명을 정리했습니다. 위에서 제시된 방법은 단편적으로 해당 라이브러리의 활용도는 다양합니다. 이번 포스팅의 주요 목적은 보안이 걸린 회사 엑셀 파일을 열기 위해 'xlwings' 라이브러리를 사용한다는 데 있습니다.

    댓글