J'ai des milliers de fichiers PDF dans mes ordinateurs dont les noms proviennent de a0001.pdf
à a3621.pdf
, et à l'intérieur de chacun il y a un titre; par exemple. "carbonate d'aluminium" pour a0001.pdf
, "nitrate d'aluminium" dans a0002.pdf
, etc., que j'aimerais extraire pour renommer mes fichiers.
J'utilise ce programme pour renommer un fichier:
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)
Je voudrais savoir s'il existe des solutions pour extraire le titre intégré dans le fichier PDF pour renommer le fichier?
Cela ne peut pas être résolu avec du Python simple. Vous aurez besoin d'un package externe tel que pdfrw
, qui vous permet de lire les métadonnées PDF. L'installation est assez facile en utilisant la norme Python gestionnaire de paquets pip
.
Sous Windows , assurez-vous d'abord que vous disposez d'une version récente de pip
à l'aide de la commande Shell:
python -m pip install -U pip
Sous Linux :
Sudo pip install -U pip
Sur les deux plates-formes, installez ensuite le package pdfrw
en utilisant
Sudo pip install pdfrw
J'ai combiné les ansatzes de zeebonk et user2125722 pour écrire quelque chose de très compact et lisible qui est proche de votre code d'origine:
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)
Ce dont vous avez besoin est une bibliothèque qui peut réellement lire les fichiers PDF. Par exemple pdfrw :
In [8]: from pdfrw import PdfReader
In [9]: reader = PdfReader('example.pdf')
In [10]: reader.Info.Title
Out[10]: 'Example PDF document'
Vous pouvez utiliser la bibliothèque pdfminer pour analyser les fichiers PDF. La propriété info contient le titre du PDF. Voici à quoi ressemble un exemple d'informations:
[{'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'}]`
Ensuite, nous pouvons extraire le titre en utilisant les propriétés d'un dictionnaire. Voici le code entier (y compris l'itération de tous les fichiers et leur renommage):
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)
Vous ne pouvez consulter que les métadonnées à l'aide d'un outil ghostscript pdf_info.ps. Il était livré avec ghostscript mais est toujours disponible sur https://r-forge.r-project.org/scm/viewvc.php/pkg/inst/ghostscript/pdf_info.ps?view=markup&root=tm