| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- mycli
- 맥
- 데이크스트라
- table status
- 알고리즘
- mysql 표 출력
- 동적 프로그래밍 방법
- CS스터디
- cs
- 오블완
- 터미널
- zsh
- oh-my-zsh
- 인프런
- MySQL
- 티스토리챌린지
- 오일러 경로
- 욕심쟁이 방법
- 인프런워밍업클럽
- 분할정복 방법
- mysql 표
- zsh theme
- VI
- 이진탐색
- 스터디2기
- spring boot
- 네트워킹데이
- 순차탐색
- Pager
- Less
- Today
- Total
Develop
Python tabula-py 모듈 (pdf의 표를 csv로 변환하기) 본문
* 작성에 도움주신 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파일이 되었는지 확인해봅니다.
저는 잘 변환되었네요 ! 제가 실행할때 난 오류는 모두 기재해 두었습니다.
그 외 오류가 나시는 분들은 처음부터 차근차근.. 구글링 해서 잘해보시길 바랍니다.
수고하셨습니다~
'백엔드 > Python 짧은 지식' 카테고리의 다른 글
| VSCODE Anaconda 가상환경에서 pip설치 안될 때 (4) | 2023.09.02 |
|---|---|
| VSCODE에서 부분 실행하기 (1) | 2023.08.26 |
| Mac에서 Python 가상환경 구성하기 (0) | 2023.08.20 |