[Python] 웹 이미지나 PDF를 함수에 전송하고 저장 장치에 다운로드하지 않는 방법

3756 단어 Python

개시하다


온라인에 공개된 이미지와 PDF를 활용하려는 장면이 많지만, 일일이 다운로드해 저장 경로를 참조하지 않았나?
URL에서 직접 데이터를 가져와 사용하는 방법을 따로 저장하지 않는 방법에 대해 설명합니다.

메서드


결론부터 말하자면.
ByteesIO를 사용하세요.io는 표준 프로그램 라이브러리이기 때문에 설치하지 않아도 사용할 수 있다.
from io import BytesIO

사용 예


사용 예지만 후생노동성에서 신종 코로나바이러스의 양성자 수를 확보한 PDFtabula에서 시계를 뽑아보자.
(참고로 tabula는 PDF에서 표를 추출하는 함수 등을 포함하는 라이브러리의 이름이다.pip install tabula-py에 설치할 수 있습니다.
우선, 데이터를 얻는 것부터 시작한다.requests나 표준 라이브러리urllib도 가능하지만 requests사용하기 편하니까 저쪽으로 가세요.
from requests import get

url = 'https://www.mhlw.go.jp/content/10906000/000699602.pdf'
content = get(url).content
이렇게 하면 PDF의 데이터가 바이트 열로 저장됩니다.
바이트열을 직접 사용할 수 있는 함수content는 필요하지 않지만, 대부분의 파일 처리 함수는 PC의 경로를 매개 변수로 한다.
사용BytesIO바이트열을 이런 함수에 전달할 수 있다.
from tabula import read_pdf

pdf_data = BytesIO(content)
df = read_pdf(pdf_data, pages='1', multiple_tables=False)[0]
df
결실

추출의 정밀도는 그런대로 괜찮지만, 우선 말하지 않아도 정상적으로 데이터를 전달할 수 있다.
사진 한번 해볼래요?
import matplotlib.pyplot as plt

url = 'https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F501281%2F428a2cd3-9005-a88d-85fa-648fe37c9618.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=21e8bcf27cad307545ed42fe9dfeaf31'
img = plt.imread(BytesIO(get(url).content))
plt.imshow(img)
plt.show()
결실

OK

최후


수용자의 함수와 상성에 따라 반드시 만능은 아니지만 사용 기회가 많기 때문에 기억하면 진전이 있을 수 있다.

좋은 웹페이지 즐겨찾기