6
August
2025
Batch-Dateivorgänge – PDF umbenennen und zusammenführen
18:24

Batch-Dateivorgänge – PDF umbenennen und zusammenführen

6 August 2025 18:24

Ich habe beschlossen, zwei Programme in Python zu teilen. Die erste besteht darin, Dateien abhängig vom Erstellungsdatum nach Seriennummer umzubenennen. Die zweite besteht darin, PDF-Dateien nach ihrer Nummer zu kombinieren.

Die Aufgabe bei der Arbeit bestand darin, die letzten Blätter der Bedienungsanleitung zu scannen, auf denen die Seriennummer angegeben ist. Es gab 6 solcher Dateien.

Dokumentensätze wurden bis zum letzten manuell in den Ordnern mit den Nummern 01, 02, 03 usw. abgelegt.
Ein Blatt – eine PDF-Datei. Dann wurden einige davon zu zwei Blättern zusammengefasst.

Ordner 01 enthält 6 Dateien

  • zufälliger Name. PDF
  • zufälliger Name. PDF
  • zufälliger Name. PDF
  • zufälliger Name. PDF
  • zufälliger Name. PDF
  • zufälliger Name. PDF

Aufgabe: 01 im Ordner festlegen
01_res1.pdf
01_res2.pdf
01_res3.pdf
01_res4.pdf

Unterteilte die Aufgabe in zwei Teilaufgaben:

  • Durchsuchen von Ordnern und Umbenennen von Dateien nach Erstellungsdatum - in den Ordnernamen + Seriennummer: 01-1.pdf, 01-2.pdf, 01-3.pdf, 01-4.pdf, 01-5.pdf und 01-6.pdf.
  • Kombinieren von Dateien gemäß dem Algorithmus: 3 und 4 in eine PDF-Datei, 5 und 6 in eine andere PDF-Datei.

Erstes Drehbuch rename_files.py kann für die Stapelumbenennung von Dateien nicht nur im PDF-Format, sondern in jedem beliebigen Format nützlich sein.
Zweites Drehbuch kombinieren_files.py implementiert die Logik zum Zusammenführen von PDF-Dateien in jedem Verzeichnis.


Eingabeparameter zum Ausführen von Programmen- Name des übergeordneten Ordners (der die Unterordner 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

wobei parent_folder die Ordner 01, 02, 03 usw. mit PDF-Dateien enthält.

Führen Sie rename_files.py mit Vorsicht aus, nicht im Arbeitsverzeichnis, da alle Dateien im Batch-Modus ohne Aufforderung umbenannt werden.

Inhalt der Datei rename_files.py:

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

und benennt PDF-Dateien in Unterverzeichnissen nach dem Namen des Unterverzeichnisses und der Ganzzahl in der Reihenfolge der Erstellung der Datei um.

Beispiel: Unterverzeichnis 01 besteht vor der Skriptausführung aus den Dateien: random912371.pdf, random167722.pdf, random561724.pdf

und nach der Ausführung des Skripts werden die Dateien im Unterverzeichnis 01 umbenannt in: 01-1.pdf,

01-2.pdf, 01-3.pdf

Betriebssystem importieren
aus pathlib import Path
Importsystem
pathlib importieren

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))  #Nur Dateien abrufen
files = [os.path.join(folder_path, f)
         for f in files]  #Fügen Sie den Pfad „folder_path“ zu jeder Datei hinzu. f
files.sort(key=lambda x: os.path.getmtime(x))  #Sortieren nach Erstellungszeit

for filename in files:
    #print(f "{cnt}. '{filename}' wird umbenannt...")
    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]
sonst:
folder_path = input("Enter the folder path: ")
list_dirs(folder_path)

Zusätzlich zum Kombinieren implementiert die Datei „combine_files.py“ die Seitendrehung vom Hoch- ins Querformat (90 Grad). Diese Transformation kann durch Bearbeiten des Quelltextes des Skripts entfernt werden.

# This script combines files

Betriebssystem importieren
Importsystem
pathlib importieren
Protokollierung importieren
Threading importieren
Importzeit
aus pathlib import Path
Vom Unterprozess Import PIPE ausführen

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, Dateien umzubenennen, habe ich hier übernommen:GitHub – Dateien nach Erstellungsdatum umbenennen, aber dort hat der Dateiname die Form Day_Month_Year_Hour_Minute_Second, und ich habe FOLDER_NAME-sequence_number.



Verwandte Veröffentlichungen