はじめに
今回は、Pythonでアプリにアップロードしたファイル(textやPDF、wordデータ)の文字情報を読み込むことに関するアウトプットをしていきます。
本編
考え方
フロントでアップロードしてサーバーに送られるファイルデータは、バイナリーデータであることを頭に入れておくことが大事です。
バイナリーデータとは、コンピュータがわかる形式のデータのことです。
https://wa3.i-3-i.info/word1146.html
text形式データの文字情報を取得
text形式データは、decodeメソッドを使えば取れちゃいます。
ワー、チョー簡単ナンデスケド
# binary_dataは、フロントからきたデータ
text = binary_data.decode('utf-8')
公式も見てみると、デコードされた情報返してくれると書いておる。
PDF形式データの文字情報を取得
-
ioを利用して、バイナリデータからBytesIOオブジェクトを作成
ioについてはこちらのように、バイナリーデータをファイルオブジェクトのように扱うことできます。
BytesIOオブジェクトを使う主な目的は、ディスク上のファイルを開かずにバイナリデータを処理することです。これにより、一時ファイルの作成や削除の手間が省け、メモリ上で完結できるので高速に処理できます -
PyPDF2というものを利用して、簡単にPDFの文字情報を取得できます
https://pypi.org/project/PyPDF2/
import io
from PyPDF2 import PdfReader
file = io.BytesIO(binary_data)
reader = PdfReader(file)
# PDFのページ数が見れる
number_of_pages = len(reader.pages)
# 全ページのテキストを抽出
text_list = []
for page in reader.pages:
text = page.extract_text()
text_list.append(text)
# テキストを連結して1つの文字列に変換
text = "\n".join(text_list)
word形式(docx)データの文字情報を取得
- PDFの時と同様にioを利用して、バイナリデータからBytesIOオブジェクトを作成
- docxというものを利用して、簡単にPDFの文字情報を取得できます
https://python-docx.readthedocs.io/en/latest/
チートシート
import io
from docx import Document
file = io.BytesIO(binary_data)
doc = Document(file)
# 全段落のテキストを取得
text_list = []
for para in doc.paragraphs:
para_text = para.text
text_list.append(para_text)
# テキストを連結して1つの文字列に変換
text = "\n".join(text_list)
雑感
Pythonも奥が深く、まだまだ知らなことだらけですが少しづつ知れると楽しい!
docxに関しては、段落、表、図も取得できたりと自分の引き出しを増やしていきたい、、!