見出し画像

PythonでPDFのテキストを出力してみる002

前回はPDFをターミナル等の画面上に表示しました。print文で表示しているため、PDFの文章が全て表示されました。
ただしこのままだとprint文で表示した画面を全てコピーしてテキストエディタに貼り付けないと行けません。正直ちょっと手間です。

テキスト保存できないか考える

一番楽なのはテキストエディタに自分で保存ではなく、勝手に保存されることです。python実行と同時にテキストファイルに保存されるのがよいなと思います。そんな事できないか考えて見ます。

先日のコード

import sys
import pypdfium2 as pdfium

pdf = pdfium.PdfDocument('2024r06_sg_qs.pdf')

for page in pdf:
    textpage = page.get_textpage()
    text = textpage.get_text_range()
    print(text)

表示ができるなら、保存もできるよねって考える事が多いかなと思います。

保存できないか考えて見る

Pythonではテキストに保存することができます。というわけで実験でやっていきます。

# 書き込み用ファイルを用意
file_w = '2024r06_sg_qs.txt'

まずは書き込み用のファイルを用意します。テキスト形式で保存するので拡張子は.txtにしてます

書き込み用コードを追加する

まずは書き込み用のコードを追加してみます

import sys
import pypdfium2 as pdfium

# 読み込みのPDFデータ
pdf = pdfium.PdfDocument('2024r06_sg_qs.pdf')

# 書き込み用ファイルを用意
file_w = '2024r06_sg_qs.txt'

for page in pdf:
    textpage = page.get_textpage()
    text = textpage.get_text_range()
    print(text)

#書き込み用ファイル
with open(file_w, 'a') as f:
    f.write(text)

このコードを実行するとこんな感じになります

ターミナルの画面

コンソール上にはprint文が表示されています。テキストはどうなっているか

- 16 -
試験問題に記載されている会社名又は製品名は,それぞれ各社の商標又は登録商標です。
なお,試験問題では,TM 及び ® を明記していません。
©2024 独立行政法人情報処理推進機構

これが実際につくられたファイルです
最後のページだけがテキストとして保存されています。

1ページ目から全部保存したい

print文では全て表示されていますが、書き込みでは最後のページしか書き込まれていません。
print文は繰り返し処理をして表示していますが、書き込み分は繰り返し処理をしていないためになります。

for文で繰り返しをする

簡単に言えば、print文のように繰り返し処理をすればよいので、コードをfor文の下にいれていきます。

最終的なコード

import sys
import pypdfium2 as pdfium

# 読み込みのPDFデータ
pdf = pdfium.PdfDocument('2024r06_sg_qs.pdf')

# 書き込み用ファイルを用意
file_w = '2024r06_sg_qs.txt'

for page in pdf:
    textpage = page.get_textpage()
    text = textpage.get_text_range()
    print(text)
    with open(file_w, 'a') as f:
        for w in text:
            f.write(w)

このようになります。これをすることでテキストファイルで保存されます。

これが最終コードで生成されたファイルとなります。
最初のテキストと最後のテキストファイルは別物のため、ハッシュ値は違います。

print文でも保存はできます

print文でも保存はできます。コードを以下のようにします

    with open(file_w, 'a') as f:
        for w in text:
            #f.write(w)
            print(w ,file=f)

このようにprint文にすることで書き込みが可能ですが、あまりお勧めはしません。print文で作られたファイルを添付しておきます

このようにとても見づらいため、今回の方法ではお勧めしません。

書き込みモードについて

書き込みは今回追記可能なaを指定してます。wの場合は追記ではなく内容をクリアしてしまうので、最後のページしか書き込みされてません。aにすることで追記をしているということになります。




この記事が気に入ったらサポートをしてみませんか?