0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

モジュール名と同名のファイルを作るとModuleNotFoundError

Last updated at Posted at 2023-12-16

pdf2txtを試すためにpdfminerを使ってみたのだが、ModuleNotFoundErrorに詰まった。

pdfminer.py
import os
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def pdf_to_text(pdf_path):
    with open(pdf_path, 'rb') as f:
        outf = StringIO()
        rm = PDFResourceManager()
        lap = LAParams()
        dev = TextConverter(rm, outf, laparams=lap)
        iprtr = PDFPageInterpreter(rm, dev)

        for page in PDFPage.get_pages(f):
            iprtr.process_page(page)

        contents = outf.getvalue()

        dev.close()
        outf.close()

        return contents

def save_text_to_file(text, output_path):
    with open(output_path, 'w', encoding='utf-8') as file:
        file.write(text)

def convert_pdfs(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        print(filename)
        if filename.endswith(".pdf"):
            pdf_path = os.path.join(input_folder, filename)
            text = pdf_to_text(pdf_path)

            # 各PDFに対応するtxtファイルを作成し、output_folderに保存
            output_path = os.path.join(output_folder, os.path.splitext(filename)[0] + ".txt")
            save_text_to_file(text, output_path)

if __name__ == "__main__":
    # PDFファイルがあるフォルダと出力先フォルダを指定
    pdf_folder = ""
    output_folder = ""

    convert_pdfs(pdf_folder, output_folder)


パスが通っていないのかと思い確認する

pip show pdfminer.six

Location: /Users/ユーザー名/.pyenv/versions/3.12.0/lib/python3.12/site-packages

sysのパスも確認

path.py
import sys
print(sys.path)
'/Users/ユーザー名/.pyenv/versions/3.12.0/lib/python3.12/site-packages'

パスに問題はない。ならばなぜ動かないのかと逡巡していたところ、リネームをすると動くことに気がつく。
どうやら実行ファイルの名前をpdfminer.pyとしていたことが原因のようだった。

つまりモジュール名と同名の実行ファイルを作成してしまうと、pythonが実行ファイルをモジュールとして解釈してしまい、標準モジュールよりも優先して読み込んでしまうということが起きるらしい。

なので実行ファイル名をリネームして解決した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?