Как извлечь название PDF-документа из script для переименования?
У меня есть тысячи 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, для переименования файла?
Ответы
Ответ 1
Установка пакета
Это невозможно решить простым 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 = '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)
Ответ 2
Вам нужна библиотека, которая действительно может читать PDF файлы. Например pdfrw:
In [8]: from pdfrw import PdfReader
In [9]: reader = PdfReader('example.pdf')
In [10]: reader.Info.Title
Out[10]: 'Example PDF document'
Ответ 3
Вы можете использовать библиотеку 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'}]`
Затем мы можем извлечь Title, используя свойства словаря. Вот весь код (включая итерацию всех файлов и их переименование):
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
Вы можете посмотреть только метаданные, используя инструмент ghostscript pdf_info.ps. Он использовался для отправки с ghostscript, но по-прежнему доступен в https://r-forge.r-project.org/scm/viewvc.php/pkg/inst/ghostscript/pdf_info.ps?view=markup&root=tm
Ответ 5
Как только вы его установили, откройте приложение и перейдите в папку "Загрузить". Вы увидите загруженные вами файлы. Просто нажмите файл, который вы хотите переименовать, и в нижней части появится пункт "Переименовать".