[PYTHON] Attribuer une date au nom du PDF décomposé pour chaque page

En premier lieu

Poursuite du démontage du fichier PDF pour chaque page (https://qiita.com/nabe3ch/items/e1638544546ab1f4b18f).

Un collègue à qui son patron a demandé de diviser les données statistiques quotidiennes PDF (qui sortent une fois par mois) en quotidiens (deux pages dans un ensemble) ouvre le PDF dans Chrome. J'étais désolé d'avoir sauvé toutes les 2 pages (date), j'ai donc créé un programme en Python qui le divise en pages arbitraires, et suis allé déjeuner dans le temps libre créé par l'automatisation.

À ce moment-là, on m'a demandé: «Puis-je nommer le fichier comme une date?» Je suis désolé de ne pas avoir envie. "N'est-ce pas bien si j'arrête de me séparer en premier lieu?", Mais "je l'ai fait jusqu'à présent, donc je ne peux plus le changer ...". Je me demande s'il y a une demande pour un programme pour libérer l'entreprise du créneau en croissance, mais je vais laisser un mémorandum.

Je l'ai changé en quelque chose comme ça

Supposons qu'il existe un fichier appelé "test.pdf" contenant des données du 01/01/2020 au 29/02/2020. Puisque 2 pages par jour sont un ensemble, je me demande si ce sera 120 pages au total. Décomposez-le en deux pages et enregistrez-le selon le format de sauvegarde du collègue tel que «01 janvier 2020.pdf», «02 janvier 2020.pdf».

pdf_separate.py


import PyPDF2
from datetime import datetime
from datetime import timedelta

f = 'test.pdf' #Fichier PDF que vous souhaitez démonter
page_sep = 2 #Combien de pages à démonter
start_day = '2020/01/01' #Date des premières données

#Comprendre le nombre de pages PDF
reader = PyPDF2.PdfFileReader(f)
page_num = reader.getNumPages()

#Convertir la première date pour datetime
start_datetime = datetime.strptime(start_day, '%Y/%m/%d')

#Définissez le nombre de processus sur zéro
count = 0

#Nombre total de pages de la page "0 (1ère page" "_"Page" juste avant "num"_Dérivation des nombres avec "sep" (en 2 incréments) et tournant avec pour
for page in range(0, page_num, page_sep):
    merger = PyPDF2.PdfFileMerger()
    #Où est le début de la page à découper?
    start = page
    #Où est la fin de la page à découper?
    end = start + page_sep
    #briser la glace
    merger.append(f, pages=(start,end))

    #date de début+temps de traitement=Entrez le processus de création d'un nom de fichier
    file_date = start_datetime + timedelta(days=count)
    #Définissez le format de la date sur "01 janvier 2020"
    file_date_format = file_date.strftime('%Y{0}%m{1}%d{2}').format(*'Date')
    #Confirmer le nom du fichier
    file_name = file_date_format + '.pdf'
    merger.write(file_name)
    merger.close
    #Compte le nombre de processus par 1.
    count += 1

print ('Allons boire ce soir')

En plus de se rappeler que la comète (+ =) se dirige vers le soleil (est, à gauche vue du nord), oubliant parfois qu'elle était "+ =" ou "= +" au début. Le dossier créé (celui du haut est omis) ressemble à ceci. pdf_sep.png

La variation mensuelle de 1/31 à 2/1 a également été convertie correctement. C'est une bonne année pour avoir des Jeux olympiques cette année. Le fichier "29 février 2020" a également été créé correctement. Maintenant, je peux aller boire avec mes collègues ce soir.

utiliser datetime

"Datetime" est utilisé pour le traitement de la date. C'est une bibliothèque Python standard, donc vous n'avez pas besoin de l'installer. C'est une bibliothèque trop familière, mais je me souviens quand j'ai commencé à utiliser Python, et je vais l'écrire pour qu'elle soit facile à comprendre pour ceux qui sont novices.

Tout d'abord, voyons quelle valeur est retournée. Par exemple, pour obtenir la date actuelle

from datetime import datetime

now_date = datetime.now()
print (now_date)
#2020-02-01 11:09:38.124982

Se sentir comme ça. Si vous souhaitez utiliser le format de date du nom de fichier enregistré par votre collègue (exemple: 01 février 2020), il existe différentes méthodes et vous pouvez avoir des préférences différentes, mais passez la date à ".strftime" et J'aime le définir comme ".format".


from datetime import datetime

now_date = datetime.now()
format_now_date = now_date.strftime('%Y{0}%m{1}%d{2}').format(*'Date')

print(format_now_date)
#02 février 2020

Si vous souhaitez créer "2020/02/01" ou "2020-02-01" sur cette base,

format_now_date = now_date.strftime('%Y{0}%m{1}%d').format(*'//')
format_now_date = now_date.strftime('%Y{0}%m{1}%d').format(*'--')

Et. N'oubliez pas de supprimer le "{2}" dans "% d {2}".

Ajouter ou soustraire

Le premier programme de niche est un mécanisme pour générer un nom de fichier en ajoutant le nombre de processus (count) à la date de début spécifiée (start_day). En d'autres termes, la date attribuée au premier fichier découpé est "01/01/2020 + 0", qui est le 1er janvier 2020, et la suivante est "01/01/2020 + 1", qui est le 2 janvier 2020. Guai.

Non limité à Python, la programmation peut être gérée avec des mots et des mécanismes de base, mais lors de l'ajout ou de la soustraction de la date de référence, l'objet "timedelta" est utilisé. Merci de considérer le changement mensuel et l'année du gonflement. Par exemple, un jour après la date de base "start_date",

file_date = start_date + timedelta(days= 1)

Et. Il y a un jour, remplacez "1" par "-1". Après une semaine, définissez "semaines = 1". Cela signifie "années = 1" un an plus tard et "mois = 1" un mois plus tard, ce qui me rappelle les souvenirs aigres-doux que j'avais lorsque j'ai commencé à toucher Python. Pas si simple, jusqu'à 7 types.

Exemple sens
weeks=10 10 semaines plus tard
days=10 10 jours plus tard
hours=10 10 heures plus tard
minutes=10 10 minutes plus tard
seconds=10 10 secondes plus tard
milliseconds=10 10 millisecondes
microseconds=10 Après 10 microsecondes

Je ne fais pas le travail délicat d'utiliser des millisecondes ou des microsecondes, alors j'aimerais que vous prépariez des années et des mois.

Je pensais que le décompte devait être gênant et que je devrais générer un tableau multidimensionnel qui définit la page de démarrage pour couper le fichier et la date. C'est un problème, et je veux améliorer le programme plus tard, mais quand une personne qui est nouvelle avec Python apparaît, je pense que c'est plus facile à lire. Une personne aussi étrange n'apparaîtra pas.

Recommended Posts

Attribuer une date au nom du PDF décomposé pour chaque page
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Obtenez le nombre d'occurrences pour chaque élément de la liste
Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain
python Remarque: map -faire la même chose pour chaque élément de la liste
J'ai essayé d'analyser les résultats du vote de la région métropolitaine d'Osaka pour chaque quartier
Obtenez le nombre de visites sur chaque page avec ReportingAPI + Cloud Functions
La troisième nuit de la boucle avec pour
Pandas du débutant, par le débutant, pour le débutant [Python]
La deuxième nuit de la boucle avec pour
Définissez le nom du processus du programme Python
[IOS] Modifiez la durée d'affichage de chaque image de l'animation GIF dans Pythonista3.
[Bash] Passez le contenu du fichier aux variables pour chaque colonne avec while read
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Faites correspondre la distribution de chaque groupe en Python
Vérifiez la date du devoir de drapeau avec Python
Traitement d'image? L'histoire du démarrage de Python pour
Renommer la balise avec un espace de noms en lxml
[Python] Obtenez la dernière date de mise à jour du site Web
Code pour vérifier le fonctionnement de Python Matplot lib
Obtenez la date de mise à jour du fichier de mémorandum Python.
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
Enregistrez la sortie du GAN conditionnel pour chaque classe ~ Avec l'implémentation cGAN par PyTorch ~