web-dev-qa-db-ja.com

名前を変更するためのスクリプト内からPDFドキュメントのタイトルを抽出する方法は?

私のコンピューターには何千ものPDFファイルがa0001.pdfからa3621.pdfであり、それぞれの中にタイトルがあります。たとえば、a0001.pdfの「炭酸アルミニウム」、a0002.pdfの「硝酸アルミニウム」、など、ファイルの名前を変更するために抽出したい。

このプログラムを使用して、ファイルの名前を変更します。

path=r"C:\Users\YANN\Desktop\..."

old='string 1'
new='string 2'

def rename(path,old,new):
    for f in os.listdir(path):
        os.rename(os.path.join(path, f), os.path.join(path, f.replace(old, new)))

rename(path,old,new)

PDFファイルに埋め込まれたタイトルを抽出してファイル名を変更する解決策があるかどうかを知りたいですか?

15
ParaH2

パッケージのインストール

これは単純なPythonでは解決できません。 pdfrw などの外部パッケージが必要になります。これにより、PDFメタデータを読み取ることができます。標準のPythonパッケージマネージャーpipを使用すると、インストールは非常に簡単です。

Windowsで、最初にシェルコマンドを使用してpipの最新バージョンがあることを確認します。

python -m pip install -U pip

オンLinux

Sudo pip install -U pip

両方のプラットフォームで、インストールしてからpdfrwパッケージを使用します

Sudo pip install pdfrw

コード

Zeebonkとuser2125722の回答を組み合わせて、元のコードに近い非常にコンパクトで読みやすいものを作成しました。

import os
from pdfrw import PdfReader

path = r'C:\Users\YANN\Desktop'


def renameFileToPDFTitle(path, fileName):
    fullName = os.path.join(path, fileName)
    # Extract pdf title from pdf file
    newName = PdfReader(fullName).Info.Title
    # Remove surrounding brackets that some pdf titles have
    newName = newName.strip('()') + '.pdf'
    newFullName = os.path.join(path, newName)
    os.rename(fullName, newFullName)


for fileName in os.listdir(path):
    # Rename only pdf files
    fullName = os.path.join(path, fileName)
    if (not os.path.isfile(fullName) or fileName[-4:] != '.pdf'):
        continue
    renameFileToPDFTitle(path, fileName)
14
Manu CJ

必要なのは、実際にPDFファイルを読み取ることができるライブラリです。たとえば pdfrw

In [8]: from pdfrw import PdfReader

In [9]: reader = PdfReader('example.pdf')

In [10]: reader.Info.Title
Out[10]: 'Example PDF document'
7
zeebonk

Pdfminerライブラリを使用して、PDFを解析できます。 infoプロパティには、PDFのタイトルが含まれます。サンプル情報は次のようになります。

[{'CreationDate': "D:20170110095753+05'30'", 'Producer': 'PDF-XChange Printer `V6 (6.0 build 317.1) [Windows 10 Enterprise x64 (Build 10586)]', 'Creator': 'PDF-XChange Office Addin', 'Title': 'Python Basics'}]`

次に、辞書のプロパティを使用してタイトルを抽出できます。コード全体を以下に示します(すべてのファイルの繰り返しと名前の変更を含む)。

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
import os

start = "0000"

def convert(var):
    while len(var) < 4:
        var = "0" + var

    return var

for i in range(1,3622):
    var = str(i)
    var = convert(var)
    file_name = "a" + var + ".pdf"
    fp = open(file_name, 'rb')
    parser = PDFParser(fp)
    doc = PDFDocument(parser)
    fp.close()
    metadata = doc.info  # The "Info" metadata
    print metadata
    metadata = metadata[0]
    for x in metadata:
        if x == "Title":
            new_name = metadata[x] + ".pdf"
            os.rename(file_name,new_name)
4
user2125722

Ghostscriptツールpdf_info.psを使用してメタデータのみを見ることができます。以前はghostscriptとともに出荷されていましたが、 https://r-forge.r-project.org/scm/viewvc.php/pkg/inst/ghostscript/pdf_info.ps?view=markup&root=tmで引き続き利用可能です

3
mikep