Как извлечь название 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, для переименования файла?

5 Solutions collect form web for “Как извлечь название PDF-документа из сценария для переименования?”

Установка пакета

Это невозможно решить простым Python. Вам понадобится внешний пакет, такой как pdfrw , который позволит вам читать метаданные PDF. Установка довольно проста, используя стандартный пакет управления пакетами Python.

В 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) 

Вам нужна библиотека, которая действительно может читать PDF-файлы. Например, pdfrw :

 In [8]: from pdfrw import PdfReader In [9]: reader = PdfReader('example.pdf') In [10]: reader.Info.Title Out[10]: 'Example PDF document' 

Вы можете использовать библиотеку 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) 

Вы можете посмотреть только метаданные, используя инструмент ghostscript pdf_info.ps. Он использовался для отправки с ghostscript, но по-прежнему доступен по адресу https://r-forge.r-project.org/scm/viewvc.php/pkg/inst/ghostscript/pdf_info.ps?view=markup&root=tm

После того, как вы его установили, откройте приложение и перейдите в папку «Загрузить». Вы увидите загруженные вами файлы. Просто нажмите файл, который вы хотите переименовать, и параметр «Переименовать» появится внизу.

  • Что назначается переменной `variable`, в` with expression as variable`?
  • Как добавить новое значение в список без использования 'append ()', а затем сохранить значение во вновь созданном списке?
  • Установка TensorFlow в Windows (Python 3.6.x)
  • Установите mod_wsgi на Ubuntu с помощью Python 3.6, Apache 2.4 и Django 1.11
  • Рекурсивная анимация python3 в QuickDraw
  • Переключение с 64-битного python.exe на 32bit в среднем исполнении
  • Оператор 'is' ведет себя неожиданно с не кэшированными целыми числами
  • Понимание лямбда в python и использование ее для передачи нескольких аргументов
  • Должен ли я вернуть None или (None, None)?
  • Эквивалент asyncio.Queues с рабочими «потоками»
  • Следите за файлом с asyncio
  •  
    Interesting Posts for Van-Lav

    Невозможно импортировать NLTK из php shell_exec

    Сравнение двух списков координат в python и использование значений координат для назначения значений

    Разделение строки на основе определенного набора слов

    Получить имя дня от Weekday int

    Среднее число номеров, хранящихся в виде строк в списке Python

    Маршрутизация ошибок Bottle.py

    Манипулирование двоичными данными в Python

    Классы и методы, со списками в Python

    Pycharm: запускать только часть моего файла Python

    Почему мой скрипт python случайно убит?

    Ошибка ​​при использовании python os.rename

    Python: возможно ли получить доступ к возвращаемому значению внутри предложения `finally`?

    Регулярное выражение Python для замены двойной обратной косой черты одним обратным слэшем

    Приближение данных с многосегментной кубической кривой безье и расстоянием, а также с учетом кривизны

    Ошибка протокола: требуется Microsoft Visual C ++ 14.0

    Python - лучший язык программирования в мире.