見出し画像

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

前回までのコード

import sys
import os
import pypdfium2 as pdfium


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

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

# ファイルが存在する場合は削除
if(os.path.isfile(file_w)):
    os.remove(file_w)

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)

前回はファイルが存在する場合は削除するという方法をしました。今回はもう少し楽にできないか考えてみました。

書き込み用ファイル用意だと・・?

自分でコードを書いていて気になった点があります。

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

この箇所です。

何がいけないのか?

別に何も悪くないし、いけないわけでもないかなと思います。例えばPDFのファイル名とテキストの保存名を変えたいとかなら、書き込み用のファイル名を自分で指定するほうがいいです。

同じ文字列を使っている・・・

今回はファイル名を考えるのが面倒で、PDFと同じ文字列を使ってます。同じ文字列を使っているのに、ファイル名を自分で指定しています。なんとなくそれが嫌だなと思いました。どうせなら自動でPDFと同じ文字列のテキストファイルを作れないかと思いました。

2024r06_sg_qs.txtというのを指定するのではなく、自動で作れるといいなということになります。

そんなことが可能なのか?

調べていたら出来そうでした。なので多分可能ではないかなと思ってます。というわけでやっていきたいと思います。

文字列と拡張子にわける

2024r06_sg_qs.pdfをPythonで文字列と拡張子にわけることができるので、わけてみます。
os.path.splitextという関数を使う事で可能みたいです。この関数を使うと文字列と拡張子と分けることが可能です。

実際にやってみる

file_name = '2024r06_sg_qs.pdf'

#ファイルを文字列と拡張子に分割する
file_name2 = os.path.splitext(file_name)
print(file_name2)

こんな感じで入れます。

('2024r06_sg_qs', '.pdf')

このように出力されます。リスト型?で出力されているのかな?と思います。文字列で2024r06_sg_qsだけを出力したいと思います。

file_name = '2024r06_sg_qs.pdf'

#ファイルを文字列と拡張子に分割する
file_name2 = os.path.splitext(file_name)
print(file_name2)
print(file_name2[0])

このように引数を指定します。

('2024r06_sg_qs', '.pdf')
2024r06_sg_qs

こんな感じで拡張子のない文字列として出力されます。

拡張子txtを結合する

文字列が出力されたので、テキストファイルにするために拡張子.txtを結合します。

#テキストファイルにするために結合する
file_w = file_name2[0] + ".txt"

このようにすることで、2024r06_sg_qs.txtというファイル名にすることが可能です。

現時点でファイルがあるわけではない

注意点としては、この時点で2024r06_sg_qs.txtというファイルが存在するというわけではないことです。2024r06_sg_qs.txtというファイルは現時点で存在しません。↑の変数はfile_wに2024r06_sg_qs.txtを代入するとう意味でしかないからになります。

open関数でファイル作成をする

Pythonではopen関数を使う事でファイル名が存在しない場合は新規作成してくれます。なのでopen関数を使って書き込みをするようにします。

with open(file_w, 'a') as f:
    for w in file_name2:
        f.write(w)

こんな感じでopen関数を使う事でファイルがない場合は新規作成することができます。

withを使う理由

open関数だけにすると、close関数を使って閉じないといけません。with open形式にすることでclose関数がなくても閉じてくれるのでこっちの書き方を僕は使ってます

完成形コード

import sys
import os
import pypdfium2 as pdfium

pdf_file_name = '2024r06_sg_qs.pdf'
#print(file)
#print(file_name)

#ファイルを文字列と拡張子に分割する
file_name = os.path.splitext(pdf_file_name)

#テキストファイルの文字列を作成する
file_w = file_name[0] + ".txt"

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


# 書き込み用ファイルを用意

if(os.path.isfile(file_w)):
    os.remove(file_w)

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)

これでPDFと同じ文字列のテキストファイルが作成されます。


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