6
August
2025
Paketoperationen mit Dateien - Umbenennen und Kombinieren von PDF
18:24

Paketoperationen mit Dateien - Umbenennen und Kombinieren von PDF

6 August 2025 18:24

Ich beschloss, zwei Programme in Python zu teilen. Das erste ist die Umbenennung der Dateien nach der Seriennummer abhängig vom Datum der Erstellung. Die zweite ist die Assoziation von PDF -Dateien nach ihrer Nummer.

Die Aufgabe bei der Arbeit bestand darin, die letzten Blätter der Verwaltung des Benutzers zu scannen, wo die Seriennummer angezeigt wird. Es gab 6 Dateien.

Die Dokumentensätze wurden manuell in Ordnern mit den Zahlen 01, 02, 03 usw. bis zum letzten Mal angezeigt.
Ein Blatt ist eine PDF -Datei. Dann wurden einige von ihnen zwei Blätter kombiniert.

Ordner 01 enthält 6 Dateien

  • Zufallsname. PDF
  • Zufallsname. PDF
  • Zufallsname. PDF
  • Zufallsname. PDF
  • Zufallsname. PDF
  • Zufallsname. PDF

Aufgabe: In Ordner 01 einstellen
01_res1.pdf
01_res2.pdf
01_res3.pdf
01_res4.pdf

Die Aufgabe unterteilte in zwei Unteraufgaben:

  • FANDS und Umbenennung von Dateien nach Datum des Erstellens-In den Namen des Ordners + Seriennummer: 01-1.pdf, 01-2.Pdf, 01-3.pdf, 01-4.pdf, 01-5.pdf und 01-6.pdf.
  • Dateien von Dateien gemäß dem Algorithmus: 3 und 4 in einer PDF-, 5- und 6 -Datei in eine andere PDF -Datei.

Erstes Skript renamE_files.py kann nützlich sein, um Dateien nicht nur für PDF -Format, sondern auch für alle zu paketen.
Das zweite Skript combine_files.py implementiert die Logik, PDF -Dateien in jedem der Kataloge zu kombinieren.


Eingabeparameter zum Starten von Programmen - _ma des übergeordneten Ordners (der verschachtelte Ordner 01, 02, 03 usw. enthält).

Beispiel für den Start:

python rename_files.py /home/user/parent_folder
python combine_files.py /home/user/parent_folder

wo parent_folder содержит папки 01, 02, 03 и т.д. с файлами PDF.

Startrenamefiles.py mit Vorsicht, Nicht auf einem funktionierenden Katalog_, da das Umbenennen aller Dateien im Paketmodus ohne Anforderung stattfindet.

Der Inhalt der Dateirename_files.py:

# This script takes path to directory with set of subdirectories, numbered 01, 02, 03, ... etc.

and renames PDF files in subdirectories after the name of subdirectory and integer number in order of creation of the file.

example: before script run subdirectory 01 consists of files : random912371.pdf, random167722.pdf, random561724.pdf

and after the script run, in subdirectory 01 files renamed to: 01-1.pdf,

01-2.pdf, 01-3.pdf

import os
from pathlib import Path
import sys
import pathlib

def list_dirs(folder_path):
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isdir(file_path):
dir_path = file_path
print(f"Processing directory '{dir_path}'")
rename_files_with_creation_date(dir_path)
print("Done!")

def rename_files_with_creation_date(folder_path):

tpl = "{0}-{num:02d}"

tpl = "{0}-{num}"
cnt = 1
folder_name = folder_path.split("/")[-1]
parent_folder_name = os.path.split(folder_path)[-1]
os.chdir(folder_path)
files = filter(os.path.isfile, os.listdir(folder_path))  # get files only
files = [os.path.join(folder_path, f)
         for f in files]  # add path folder_path to each file f
files.sort(key=lambda x: os.path.getmtime(x))  # sort by creation time

for filename in files:
    # print(f"{cnt}. Renaming '{filename}'...")
    if os.path.isfile(filename):
        ext = pathlib.Path(filename).suffix
        new_name = tpl.format(folder_name, num=cnt) + ext
        filename_new = os.path.join(folder_path, new_name)
        if (filename != filename_new):
            print(f"Ranaming '{filename}' to '{filename_new}'")
            if not os.path.isfile(filename_new):
                os.rename(filename, filename_new)
                # print("OK")
            else:
                print(f"File '{filename_new}' exists, skipping.")
        cnt = cnt + 1

if name == "main":
if len(sys.argv) == 2:
folder_path = sys.argv[1]
else:
folder_path = input("Enter the folder path: ")
list_dirs(folder_path)

Zusätzlich zum Assoziation implementiert die Datei combine_files.py eine Seitenwende vom Porträt zum Album (90 Grad). Diese Transformation kann durch Bearbeiten des ersten Textes des Skripts entfernt werden.

# This script combines files

import os
import sys
import pathlib
import logging
import threading
import time
from pathlib import Path
from subprocess import PIPE, run

def list_dirs(folder_path):
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isdir(file_path):
dir_path = file_path
print(f"Processing directory '{dir_path}'")
combine_files(dir_path)
print("Done!")

def combine_files(folder_path):
folder_name = folder_path.split("/")[-1]
parent_folder_name = os.path.split(folder_path)[-1]
os.chdir(folder_path)
files = filter(os.path.isfile, os.listdir(folder_path))
files = sorted(files)

cnt = 1
for filename in files:
    full_name = os.path.join(folder_path, filename)
    if (filename == parent_folder_name + "-1.pdf"):
        suffix = "_res1.pdf"
        new_name = folder_name + suffix
        cmdstr = "qpdf " + full_name + " " + new_name + " --rotate=+90"
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-2.pdf"):
        suffix = "_res2.pdf"
        new_name = folder_name + suffix
        new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf " + full_name + " " + new_name + " --rotate=+90"
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-3.pdf"):
        suffix = "_res3.pdf"
        new_name = folder_name + suffix
        full_new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf --empty --pages " + full_name + " " + \
            full_name.replace("3.pdf", "4.pdf") + " -- --rotate=+90 " + full_new_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + full_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-4.pdf"):
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-5.pdf"):
        suffix = "_res4.pdf"
        new_name = folder_name + suffix
        full_new_name = os.path.join(folder_path, new_name)
        cmdstr = "qpdf --empty --pages " + full_name + " " + \
            full_name.replace("5.pdf", "6.pdf") + " -- --rotate=+90 " + full_new_name
        print(cmdstr)
        result = run(cmdstr.split(" "))
        time.sleep(1)
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))
    if (filename == parent_folder_name + "-6.pdf"):
        cmdstr = "rm " + os.path.join(folder_path, filename)
        print(cmdstr)
        result = run(cmdstr.split(" "))

if name == "main":
if len(sys.argv) == 2:
folder_path = sys.argv[1]
else:
folder_path = input("Enter the folder path: ")
list_dirs(folder_path)


Archiv mit 2 Programmen:
rename_files_by_created_date_and_comBine.zip

Die Idee zum Umbenennen von Dateien habe ich von hier: GitHub – Dateien nach Erstellungsdatum umbenennen, aber dort hat der Dateiname die Form Tag_Monat_Jahr_Stunde_Minute_Sekunde und ich habe ORDNERNAME-Sequenznummer.



Verwandte Veröffentlichungen