J'essaie de convertir tous les fichiers .job d'un dossier en un seul pdf. ce code fait cela mais ils ne sont pas dans un ordre particulier. Je voudrais qu'ils soient importés dans l'ordre du moment où le fichier a été créé ou leur nom de fichier suit un modèle défini 'XXX_1.jpg'

Voici ce que j'ai jusqu'à présent:

import img2pdf
os.chdir('C:/Path')
# convert all files ending in .jpg inside a directory

with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([i for i in os.listdir('.') if i.endswith(".jpg")]))
0
Dominic Naimool 31 août 2020 à 00:56

2 réponses

Meilleure réponse

Tout d'abord, vous pouvez utiliser glob pour rassembler tous les chemins du files dans votre répertoire dans une liste. Ensuite, avec le os module getctime, vous pouvez obtenir la liste des heures de création. J'ai zippé les deux listes, puis créé un dictionnaire dont les clés sont le chemin du fichier et les valeurs - heure de création. Enfin, j'ai obtenu le dictionnaire organisé par valeurs à l'aide du module opérateur pour organiser tout le dictionnaire dans l'ordre décroissant des valeurs (c'est-à-dire le fichier le plus récent en premier)

import os
import glob
import operator
import img2pdf

a= glob.glob("my_directory/*.jpg")
b = [os.path.getctime(i) for i in a]
c = {}
for i,j  in list(zip(a,b)):
    c[i] = j
sorted_c = dict(sorted(c.items(), key=operator.itemgetter(1),reverse=True))
with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([k for k in sorted_c]))
2
Seyi Daniel 30 août 2020 à 22:51

Si je ne me trompe pas, os.listdir renvoie une liste triée par nom par défaut. Si vous souhaitez les trier par date de dernière modification, vous pouvez les trier en utilisant os.getmtime comme clé:

#import img2pdf
#import os

os.chdir('C:/Path')
paths = sorted(os.listdir('.'), key=os.path.getmtime)

with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([i for i in paths if i.endswith(".jpg")]))

Consultez la documentation pour plus d'informations: https://docs.python.org/3 /library/os.path.html

os.path.getmtime (chemin)

  • Renvoie l'heure de la dernière modification du chemin. La valeur de retour est un nombre à virgule flottante donnant le nombre de secondes depuis l'époque (voir le module de temps). Soulevez OSError si le fichier n'existe pas ou est inaccessible.
1
Oneiros 30 août 2020 à 22:35