Python İle Dosya Arama İşlemi

Merhaba Arkadaşlar Python ile Dosya arama ve bulunan dosyanın klasorunu açmak için minik bir kodlama hazırladım.

Bilgisayarında belirli bir dosyayı ararken klasör klasör dolaşmak zorunda kaldığını mutlaka yaşamışsındır. Özellikle disk büyüdükçe bu iş hem zaman kaybettirir hem de can sıkıcı hale gelir. İşte tam bu noktada, Python ile yazılmış basit ama etkili bir dosya arama scripti işini oldukça kolaylaştırır.

Bu uygulamada senden sadece iki bilgi istenir: Aramanın başlayacağı dizin ve aradığın dosya adı ya da deseni (*.php, *.xls gibi). Program çalışmaya başladığında, arka planda tüm alt klasörleri tararken sen de ekranda dönen bir yükleniyor animasyonu görürsün. Böylece programın hâlâ çalıştığını net şekilde anlarsın.

Arama işlemi tamamlandığında, bulunan dosyalar sana numaralı bir liste halinde gösterilir. Buradan sadece bir sayı girerek, dosyanın bulunduğu klasörü anında Windows Explorer ile açabilirsin. Uzun dizin yollarını ezberlemene ya da manuel arama yapmana gerek kalmaz.

Bu script, Python’un dosya sistemiyle ne kadar güçlü çalışabildiğini ve küçük dokunuşlarla kullanıcı deneyiminin nasıl iyileştirilebileceğini gösteren güzel bir örnektir. İstersen üzerine eklemeler yaparak daha da gelişmiş bir araca dönüştürmen de mümkündür.Python kodlarınızı Exe haline çevirmek için öncelikle pyinstallerin kurulması gerekmektedir.Aşağıda Açıklamalı komutları yazıyorum.

pip install pyinstaller

Daha Sonra Tek EXE üretmek için;

pyinstaller --onefile dosya_ara.py

Konsol penceresi Gizli olsun istersen;

pyinstaller --onefile --noconsole dosya_ara.py

İkon Eklemek istersen ;

pyinstaller --onefile --icon=icon.ico dosya_ara.py




import os                     # Dosya ve dizin işlemleri için standart kütüphane
import fnmatch                # Dosya adlarını joker karakterlerle eşleştirmek için kullanılır
import subprocess             # Harici sistem komutlarını çalıştırmak için kullanılır
import threading              # Aynı anda birden fazla iş parçacığı (thread) çalıştırmak için
import time                   # Zamanla ilgili işlemler (bekleme vb.) için


loading = True                # Spinner'ın çalışıp çalışmayacağını kontrol eden bayrak




def spinner():
    # Dosya arama işlemi sürerken kullanıcıya animasyon göstermek için
    while loading:            # loading True olduğu sürece dönmeye devam eder
        for c in "|/-\\":   # Spinner animasyonu için karakter dizisi
            if not loading:   # Arama bittiyse döngüden çık
                break
            print(f"\rAranıyor... {c}", end="", flush=True)  # Aynı satırda animasyon yazdır
            time.sleep(0.1)   # Animasyonun hızını ayarlamak için kısa bekleme
    print("\rArama tamamlandı.   ")  # Arama tamamlandığında mesaj yazdır




def dosya_ara(baslangic_dizini, arama_deseni):
    bulunanlar = []           # Bulunan dosyaların tutulacağı liste


    # Belirtilen dizin ve alt dizinlerde gezinir
    for root, dirs, files in os.walk(baslangic_dizini):
        for file in files:    # Her dizindeki dosyaları tek tek kontrol eder
            # Dosya adı arama desenine uyuyorsa
            if fnmatch.fnmatch(file.lower(), arama_deseni.lower()):
                # Dosya adı ve bulunduğu dizini listeye ekler
                bulunanlar.append((file, root))


    return bulunanlar          # Bulunan dosyaların listesini geri döndürür




def klasor_ac(yol):
    # Windows Explorer ile ilgili klasörü açar
    subprocess.Popen(f'explorer "{yol}"')




# ---------------- ANA PROGRAM ----------------


# Kullanıcıdan arama yapılacak başlangıç dizinini alır
baslangic = input("Arama yapılacak dizin (örnek C:\\): ").strip()


# Kullanıcıdan aranacak dosya adını veya desenini alır
aranacak = input("Aranacak dosya (*.php, *.xls, excel.xls): ").strip()


# Spinner fonksiyonunu ayrı bir thread olarak başlatır
spinner_thread = threading.Thread(target=spinner)
spinner_thread.start()


# Dosya arama işlemini başlatır
s aranacak)


# Arama tamamlandığı için spinner'ı durdurur
loading = False
spinner_thread.join()         # Spinner thread'inin tamamen bitmesini bekler


# Hiç dosya bulunmadıysa
if not sonuclar:
    print("Dosya bulunamadı.")
    exit()                    # Programı sonlandırır


print("\nArama Sonuçları:\n")


# Bulunan dosyaları numaralandırarak ekrana yazdırır
for index, (dosya, dizin) in enumerate(sonuclar, start=1):
    print(f"{index} - {dosya} - {dizin}")


try:
    # Kullanıcıdan hangi dosyanın klasörünün açılacağını sorar
    secim = int(input("\nHangi dosyanın klasörü açılsın? (index no): "))
except ValueError:
    # Sayı girilmezse hata mesajı verir
    print("Geçersiz giriş.")
    exit()


# Seçim geçerli aralıkta mı kontrol edilir
if 1 <= secim <= len(sonuclar):
    secilen_dizin = sonuclar[secim - 1][1]  # Seçilen dosyanın dizin yolunu alır
    klasor_ac(secilen_dizin)                # Klasörü açar
else:
    print("Geçersiz seçim.")