Python’da dosyalar üzerinde çalışırken belirli uzantılı dosyaları bulmak yaygın bir işlemdir. Bu makale, farklı ihtiyaçları ve kodlama stillerini karşılayan, bunu gerçekleştirmenin birkaç verimli ve çok yönlü yöntemini ele alıyor. Farklı Python modüllerini ve tekniklerini ele alacağız, böylece belirli kullanım durumunuz için en uygun yaklaşımı seçebilirsiniz.
İçindekiler
glob
Modülünün Kullanımıos
Modülünden Faydalanma- Tek Dizin Aramaları için
pathlib
‘in Kullanımı os.walk
ile Özyinelemeli Aramapathlib.rglob
ile Özyinelemeli Arama
1. glob
Modülünün Kullanımı
glob
modülü, tek bir dizin içinde tanımlanmış bir kalıpla eşleşen dosyaları bulmanın özlü bir yolunu sunar. glob()
fonksiyonu, kalıbı karşılayan yolların bir listesini döndürür.
import glob
def find_files_with_extension_glob(directory, extension):
"""glob.glob() kullanarak belirli bir uzantılı dosyaları bulur."""
return glob.glob(f"{directory}/*{extension}")
# Örnek:
files = find_files_with_extension_glob("./my_directory", ".txt")
print(files)
2. os
Modülünden Faydalanma
os
modülü daha ayrıntılı kontrol sağlar. os.listdir()
bir dizindeki tüm girdileri listeler ve özel filtreleme yapılmasına olanak tanır.
import os
def find_files_with_extension_os(directory, extension):
"""os.listdir() kullanarak belirli bir uzantılı dosyaları bulur."""
files = []
for filename in os.listdir(directory):
if filename.endswith(extension):
files.append(os.path.join(directory, filename))
return files
# Örnek:
files = find_files_with_extension_os("./my_directory", ".txt")
print(files)
3. Tek Dizin Aramaları için pathlib
‘in Kullanımı
pathlib
modülü nesne yönelimli bir yaklaşım sunar. glob()
metodu, glob.glob()
‘dan daha temiz bir sözdizimi sunar.
from pathlib import Path
def find_files_with_extension_pathlib(directory, extension):
"""pathlib.glob() kullanarak belirli bir uzantılı dosyaları bulur."""
return list(Path(directory).glob(f"*{extension}"))
# Örnek:
files = find_files_with_extension_pathlib("./my_directory", ".txt")
print(files)
4. os.walk
ile Özyinelemeli Arama
Alt dizinleri aramak için os.walk()
dizin ağacını dolaşır ve her dosyanın istenen uzantıya sahip olup olmadığını kontrol etmenizi sağlar.
import os
def find_files_recursive_os(directory, extension):
"""os.walk() kullanarak belirli bir uzantılı dosyaları özyinelemeli olarak bulur."""
files = []
for root, _, filenames in os.walk(directory):
for filename in filenames:
if filename.endswith(extension):
files.append(os.path.join(root, filename))
return files
# Örnek:
files = find_files_recursive_os("./my_directory", ".txt")
print(files)
5. pathlib.rglob
ile Özyinelemeli Arama
pathlib
‘in rglob()
metodu, özyinelemeli aramalar için en zarif çözümü sunar.
from pathlib import Path
def find_files_recursive_pathlib(directory, extension):
"""pathlib.rglob() kullanarak belirli bir uzantılı dosyaları özyinelemeli olarak bulur."""
return list(Path(directory).rglob(f"*{extension}"))
# Örnek:
files = find_files_recursive_pathlib("./my_directory", ".txt")
print(files)
Örneklerin doğru çalışması için “my_directory” adında bazı .txt dosyaları içeren bir klasör oluşturmayı unutmayın. Kodlama stilinize ve proje gereksinimlerinize en uygun yöntemi seçin. Basit, tek dizin aramaları için glob
veya pathlib.glob()
mükemmel seçeneklerdir. Özyinelemeli aramalar için pathlib.rglob()
en özlü ve okunabilir çözümü sağlar.