• 10-08-2024, 16:06:10
    #1
    Merhaba. Python ile II Mərhələ yani Türkçe (Aşama II) isimli klasör içerisinde yer alan CIZIM, CIZGI, CIZIMLER, CIZGILER içerisinde yer alan tüm PDF dosyalarını ayırıp, farklı bir hedef klasöre kopyasını nasıl oluşturabilirim? II Mərhələ hedef klasör içerisinde doğrudan CIZIM, CIZGI, CIZIMLER veCIZGILER isimli klasörler bulunmuyor aslında. Alt klasörler içerisinde bulunuyor.

    Örneğin: II Mərhələ içerisinde KÖPRÜ onun da içerisinde YOL altında bulunuyor CIZGI isimli klasör. Yani bu sub folder dediğim klasörleri yani kısacası nasıl Windows'da klasör içerisine girip sağ üst köşeden arama yapıyoruz ilgili klasörü bulmak için mesela aynı mantıkta ilgili klasörleri bulsun ve onun içerisindeki PDF dosyaları ayırsın. Şunu da belirtmek isterim. CIZGI içerisinde de PDFs klasörü olabilir. Yani kendisi o klasörler içerisinde PDF'leri ayırsın kısacası Benim için. Umarım fikrimi anlatabilmişimdir. Anlamayan olursa video şeklinde izah edebilirim.
  • Kabul Edilen Cevap
    • import os
      import shutil
      
      # Pdflerin bulunduğu ana klasör yolu
      source_directory = r"C:\Documents\path\to\ana_klasor"
      
      
      # Dosyaların kopyalanacağı klasör yolu
      target_directory = r"C:\Downloads\path\to\hedef_klasor"
      
      # Kopyalamak istediğimiz klasör isimleri
      folder_names = ["CIZIM", "CIZGI", "CIZIMLER", "CIZGILER"]
      
      # Hedef klasör (target_directory) yoksa oluştur
      if not os.path.exists(target_directory):
          os.makedirs(target_directory)
      
      # Ana klasördeki tüm alt klasörleri kontrol et
      for root, dirs, files in os.walk(source_directory):
          for folder in dirs:
              if folder in folder_names:
                  folder_path = os.path.join(root, folder)
                  for dirpath, dirnames, filenames in os.walk(folder_path):
                      for filename in filenames:
                          if filename.endswith(".pdf"):
                              source_file = os.path.join(dirpath, filename)
                              destination_file = os.path.join(target_directory, filename)
                              # Aynı isimde PDF varsa sonuna numara ekler
                              counter = 1
                              while os.path.exists(destination_file):
                                  name, ext = os.path.splitext(filename)
                                  new_name = f"{name}_{counter}{ext}"
                                  destination_file = os.path.join(target_directory, new_name)
                                  counter += 1
                              shutil.copy2(source_file, destination_file)
                              print(f"Kopyalandı: {source_file} -> {destination_file}")
      
      print("İşlem tamamlandı.")
      Anladığım kadarıyla böyle bir işlev istiyorsunuz
  • 10-08-2024, 16:11:50
    #2
    Hepsinin bulunduğu dizinde bunlardan farklı kullanılmayan bir klasör var mı? Örneğin folder/bahsettiğiniz ana ve alt dizinler gibi mi? Hepsi folder içindeyse bir bot yazabilirim.
  • 10-08-2024, 16:17:49
    #3
    ErayEfe adlı üyeden alıntı: mesajı görüntüle
    Hepsinin bulunduğu dizinde bunlardan farklı kullanılmayan bir klasör var mı? Örneğin folder/bahsettiğiniz ana ve alt dizinler gibi mi? Hepsi folder içindeyse bir bot yazabilirim.
    Hemen bir video hazırlayıp upload edeceğim hocam. Daha net anlaşılır.
  • 10-08-2024, 16:33:09
    #4
    Bu cevap, konu sahibi tarafından kabul edilebilir bir cevap olarak işaretlendi.
    import os
    import shutil
    
    # Pdflerin bulunduğu ana klasör yolu
    source_directory = r"C:\Documents\path\to\ana_klasor"
    
    
    # Dosyaların kopyalanacağı klasör yolu
    target_directory = r"C:\Downloads\path\to\hedef_klasor"
    
    # Kopyalamak istediğimiz klasör isimleri
    folder_names = ["CIZIM", "CIZGI", "CIZIMLER", "CIZGILER"]
    
    # Hedef klasör (target_directory) yoksa oluştur
    if not os.path.exists(target_directory):
        os.makedirs(target_directory)
    
    # Ana klasördeki tüm alt klasörleri kontrol et
    for root, dirs, files in os.walk(source_directory):
        for folder in dirs:
            if folder in folder_names:
                folder_path = os.path.join(root, folder)
                for dirpath, dirnames, filenames in os.walk(folder_path):
                    for filename in filenames:
                        if filename.endswith(".pdf"):
                            source_file = os.path.join(dirpath, filename)
                            destination_file = os.path.join(target_directory, filename)
                            # Aynı isimde PDF varsa sonuna numara ekler
                            counter = 1
                            while os.path.exists(destination_file):
                                name, ext = os.path.splitext(filename)
                                new_name = f"{name}_{counter}{ext}"
                                destination_file = os.path.join(target_directory, new_name)
                                counter += 1
                            shutil.copy2(source_file, destination_file)
                            print(f"Kopyalandı: {source_file} -> {destination_file}")
    
    print("İşlem tamamlandı.")
    Anladığım kadarıyla böyle bir işlev istiyorsunuz
  • 10-08-2024, 23:39:22
    #5
    mebularts adlı üyeden alıntı: mesajı görüntüle
    import os
    import shutil
    
    # Pdflerin bulunduğu ana klasör yolu
    source_directory = r"C:\Documents\path\to\ana_klasor"
    
    
    # Dosyaların kopyalanacağı klasör yolu
    target_directory = r"C:\Downloads\path\to\hedef_klasor"
    
    # Kopyalamak istediğimiz klasör isimleri
    folder_names = ["CIZIM", "CIZGI", "CIZIMLER", "CIZGILER"]
    
    # Hedef klasör (target_directory) yoksa oluştur
    if not os.path.exists(target_directory):
        os.makedirs(target_directory)
    
    # Ana klasördeki tüm alt klasörleri kontrol et
    for root, dirs, files in os.walk(source_directory):
        for folder in dirs:
            if folder in folder_names:
                folder_path = os.path.join(root, folder)
                for dirpath, dirnames, filenames in os.walk(folder_path):
                    for filename in filenames:
                        if filename.endswith(".pdf"):
                            source_file = os.path.join(dirpath, filename)
                            destination_file = os.path.join(target_directory, filename)
                            # Aynı isimde PDF varsa sonuna numara ekler
                            counter = 1
                            while os.path.exists(destination_file):
                                name, ext = os.path.splitext(filename)
                                new_name = f"{name}_{counter}{ext}"
                                destination_file = os.path.join(target_directory, new_name)
                                counter += 1
                            shutil.copy2(source_file, destination_file)
                            print(f"Kopyalandı: {source_file} -> {destination_file}")
    
    print("İşlem tamamlandı.")
    Anladığım kadarıyla böyle bir işlev istiyorsunuz
    Hocam teşekkürler! Kod sorunsuz çalışıyor.