Selamlar. Yine işimize yarayacak bir konuyu paylaşmak istiyorum. Elimde 2 adet klasör ve içlerinde yüzlerce pdf dosyası mevcut.
Yapmak istediğim bu iki klasörde bulunan tüm pdf dosyalarını tek bir klasöre almak ve bunu yaparken de aynı isme sahip pdf dosyalarını birleştirip yine isim değişikliği olmadan aynı isimde kaydetmek. Birleştirmekten kastımda birini diğerinin devamına eklemek. Öncelik sırası benim için fark etmediği için bu konuda bir düzenleme yapmadım. İhtiyaç olması halinde buda ayarlanabilir.
Bunun için python da os, shutil ve fitz kütüphanelerini kullanacağım. Pdf birleştirme işlemi için bir çok python kütüphanesi mevcut fakat kullandığınız python sürümüne göre bazen hata alabiliyorsunuz.
Ben de Python 3.10.11 sürümü yüklü. Bu sürümde fitz sorunsuz çalıştığı için ben onu kullandım.
import os
import fitz
import shutil
klasor1 = 'C:\\Users\\root\\Desktop\\pythonpdf\\sayılar'
klasor2 = 'C:\\Users\\root\\Desktop\\pythonpdf\\yazısayılar'
hedef_klasor = 'C:\\Users\\root\\Desktop\\pythonpdf\\hedef_klasör'
# Taşımanın yapılacağı klasör eğer yoksa hedef_klasor isminde oluşturulur.
if not os.path.exists(hedef_klasor):
os.makedirs(hedef_klasor)
def birlestir_ve_tasi(pdf_ad):
yol_klasor1 = os.path.join(klasor1, pdf_ad)
yol_klasor2 = os.path.join(klasor2, pdf_ad)
hedef_yol = os.path.join(hedef_klasor, pdf_ad)
pdf_birlestirici = fitz.open()
if os.path.exists(yol_klasor1):
pdf1 = fitz.open(yol_klasor1)
pdf_birlestirici.insert_pdf(pdf1)
if os.path.exists(yol_klasor2):
pdf2 = fitz.open(yol_klasor2)
pdf_birlestirici.insert_pdf(pdf2)
pdf_birlestirici.save(hedef_yol)
pdf_birlestirici.close()
print(f'{pdf_ad} birleştirilip {hedef_klasor} klasörüne taşındı.')
# 1. Kalsördeki PDF dosyalarını işleme alıyoruz.
for pdf_dosya in os.listdir(klasor1):
if pdf_dosya.endswith('.pdf'):
birlestir_ve_tasi(pdf_dosya)
# 2. Kalsördeki PDF dosyalarını işleme alıyoruz.e
for pdf_dosya in os.listdir(klasor2):
if pdf_dosya.endswith('.pdf'):
if pdf_dosya not in os.listdir(hedef_klasor):
# Eğer hedef klasörde aynı isimde bir dosya yoksa, kopyala
shutil.copyfile(os.path.join(klasor2, pdf_dosya), os.path.join(hedef_klasor, pdf_dosya))
print(f'{pdf_dosya} hedef klasöre kopyalandı.')
Yukarıdaki kod bloğunda klasör1 ve klasör2 ile hedef_klasor değişkenlerini kendi sisteminize göre uyarlamanız yeterli olacaktır.