Develop

Python tabula-py 모듈 (pdf의 표를 csv로 변환하기) 본문

백엔드/Python 짧은 지식

Python tabula-py 모듈 (pdf의 표를 csv로 변환하기)

230801 2023. 9. 24. 20:04

* 작성에 도움주신 Yana, Jerrie 님 감사합니다.

 

 

tabula-py는 pdf에서 표를 추출 할 때 사용합니다.

(저는 재무제표의 표를 추출할때 사용했습니다.)

 

 

 

준비물 : 변환할 pdf file, vscode,  python 8버전 이상, java 8버전 이상( 혹은 jdk 17 버전 설치)

 

 

전체 실행 코드

#모듈 호출
import tabula
from tabula.io import read_pdf

# pdf를 불러오고, 데이터프레임으로 변환
df = tabula.read_pdf("파일경로/파일이름.pdf", pages='all')

#df 확인
print(df)

# df이 확인되면 pdf를 csv로 변환
tabula.convert_into("변환할 파일 이름.pdf", "변환 후 파일 이름.csv", output_format="csv", pages='all')

# 변환 후 저장할 경로 입력
tabula.convert_into_by_batch("변환 후 저장할 경로", output_format='csv', pages='all')

print("pdf의 table이 csv로 추출 되었습니다.")

 

 

 

1. tabula-py 라이브러리 설치 및 업그레이드

아래 코드를 '터미널' 혹은 'vscode 내장 터미널'에 입력합니다.

 

1) tabula-py 설치

pip install tabula-py

 

2) tabula-py 최신버전으로 upgrade

(pip upgrade를 하면 read_pdf attribute error를 해결할 수 있습니다.)

pip install --upgrade tabula-py

 

3) 모듈이 제대로 설치되었는지 확인

pip list

*pip list에 tabula-py가 2023년 09월 현재 기준, 2.8.2 버전으로 표시된다면 최신입니다.

 

 

 

2. python3   8버전 이상 설치 

0) python 버전 확인

터미널에서 아래 명령어를 입력해줍니다.

python --version

 

 

-python3이 8버전 이상이면 아래 큰 3번으로 이동합니다.

-8버전 이하면 8버전 이상으로 가상환경을 설정해줍니다.

 

 

 

1) vscode 터미널에서 가상환경을 만들어줍니다.

예시 :  conda create -n 가상환경명 python=가상환경 파이썬 버전

conda create -n py11 python=3.11.4

저는 가상환경이름은 py11로, 파이썬 버전은 3.11.4로 해주었습니다.

 

 

2) 가상환경이 만들어졌는지 확인

conda env list

가상환경 리스트에 base(기본)외에 py11(내가 만든 가상환경) 등 표시 되어있다면 만들어진겁니다.

 

 

3) 가상환경 활성화

만든 가상환경을 활성화 시켜줍니다.

conda activate py11

이후 conda env list 명령어를 통해 py11에 *(별표)가 붙어있다면 활성화 된겁니다.

 

 

4) 가상환경 인터프리터 연결

vscode py파일에서 mac 기준,  커맨드+쉬프트+p를 눌렀을때

(윈도우 기준, 컨트롤+쉬프트+p)

 

파이썬 인터프리터 선택 -> py11로 눌러 연결해주면 됩니다.

 

 

3. java 8 버전 이상 설치 혹은 jdk 설치 및 경로설정

3-1) 선택지 1_java 8 버전 이상 설치

tabula는 java 기반 모듈로서 java 환경에서 실행될 수 있도록 java 혹은 jdk (java 개발 키트) 설치가 필요합니다.

 

자신의 운영 체제와 맞는 java를 설치해주세요! (윈도우/맥/리눅스 등)

https://www.java.com/ko/download/manual.jsp

 

 

3-2) 선택지2_ tabula는 java언어로 작성되었으므로 컴파일 및 실행을 지원하는 도구와 라이브러리를 제공하는 jdk를 설치 해야 됩니다.

(jdk를 설치하면 jvm dll not found오류를 해결할 수 있습니다.)

 

1) jdk 설치

https://www.oracle.com/kr/java/technologies/downloads/#java17

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

저는 jdk 17버전을 설치해주었습니다.

 

 

2) jdk가 잘 설치되었는지 확인해봅니다.

터미널에서 아래 명령어를 입력합니다.

java -version

jdk가 17로 잘깔렸습니다.

 

3) jdk의 설치경로를 확인해봅니다.

터미널에서 아래 명령어를 입력합니다.

echo $JAVA_HOME

 

기본 설치 경로는 '/Library/Java/JavaVirtualMachines' 이고, 이안에 jdk 17버전이 설치 됩니다.

 

 

4) jdk가 여러개 혹은 구버전이 깔려있으신 분은 삭제를 해줍니다.

 

5) 터미널에서 ls와 cd .. 명령어를 이용해 2)의 경로까지 진입해줍니다.

 

-ls, cd  명령어 사용법-

ls : 내가 있는곳의 전체 폴더, 파일 리스트 알려줘

cd .. : 상위 폴더로 올라가줘

cd 폴더명 : cd Library 는 '라이브러리로 가줘' 라는 뜻입니다.

 

 

6) 구버전 삭제

터미널에서 아래 명령어 입력후 패스워드가 뜨면 컴퓨터 킬때 입력하는 패스워드를 입력해주시면 됩니다.

sudo rm -rf adoptopenjdk-8.jdk

저는 이것저것 시도하다가 깔았었던 jdk-8을 삭제해줬습니다. jdk 버전이 다른분이라면 자신의 버전을 입력하시면 됩니다.

 

3-1-3) 삭제되었는지 확인

아까 했던 방식대로 터미널에서 jdk가 설치된 경로에 타고타고 들어가서 삭제되었는지 확인해보세요

 

4. 코드 실행

-프로세스는 모듈 호출, pdf파일 불러오고, 데이터프레임으로 변환 후 csv로 변환 입니다.

-py파일이 있는경로에 pdf파일이 있으면 '파일이름.pdf'만 입력해주시면 됩니다.

#모듈 호출
import tabula
from tabula.io import read_pdf

# pdf를 불러오고, 데이터프레임으로 변환
df = tabula.read_pdf("파일경로/파일이름.pdf", pages='all')

#df 확인
print(df)

# df이 확인되면 pdf를 csv로 변환
tabula.convert_into("변환할 파일 이름.pdf", "변환 후 파일 이름.csv", output_format="csv", pages='all')

# 변환 후 저장할 경로 입력
tabula.convert_into_by_batch("변환 후 저장할 경로", output_format='csv', pages='all')

print("pdf의 table이 csv로 추출 되었습니다.")

 

5. 변환 확인

폴더에 변환된 csv파일이 되었는지 확인해봅니다.

저는 잘 변환되었네요 ! 제가 실행할때 난 오류는 모두 기재해 두었습니다.

그 외 오류가 나시는 분들은 처음부터 차근차근.. 구글링 해서 잘해보시길 바랍니다.

 

수고하셨습니다~