Birçok Python programı, dosya sistemi içinde dosya okumak ve yazmak için gezinmeye ihtiyaç duyar. Yaygın bir işlem, sıkça CWD olarak kısaltılan geçerli çalışma dizinini almaktır.
Python'da dosya sistemi yollarına erişmek için kullanılabilecek iki ana modül vardır: os modülü ve pathlib modülü.
os modülü, geçerli çalışma dizinini almanın geleneksel yaklaşımını sunar ve yollar ve dosya sistemiyle çalışır.
pathlib ise daha yeni bir modül olup, nesne yönelimli, sağlam ve çapraz platform bir yaklaşım sunar.
Bu eğitimde, geçerli çalışma dizinini alma ve üzerinde işlem yapma yöntemlerini inceliyorum. Python hakkında daha fazla bilgi edinmek isterseniz, diğer bazı blog yazılarıma da göz atabilirsiniz:
Geçerli çalışma dizini, bir Python programının çalıştırıldığı dizindir. Göreli dosya yolları için bir referans noktası görevi görür ve programın dizin hiyerarşisi içindeki dosya ve kaynaklara erişmesini sağlar.
os ve pathlib modüllerini kullanarak geçerli çalışma dizinine nasıl erişileceğine bakalım ve iki çözümü karşılaştıralım.
os.getcwd() Kullanımı
os modülü, bilgisayarın işletim sistemine erişim sağlar. getcwd() fonksiyonu geçerli çalışma dizinini getirir:
Çıktı, betiği içeren dizinin yolunu gösterir. Yolun biçimi işletim sistemine bağlıdır. Yukarıdaki çıktı, Linux, Unix ve macOS gibi POSIX işletim sistemleri içindir.
Aynı yol Windows sistemde şu şekilde görüntülenir:
Bu nedenle, bu yolla çalışmak için string metotlarını ve diğer string işlemlerini kullanmamız gerekir.
pathlib.Path.cwd() Kullanımı
Python 3.4, dosya yollarına erişmek ve onları işlemek için nesne yönelimli bir yaklaşım sunan pathlib modülünü tanıttı. pathlib'deki ana sınıf Path'tir; geçerli çalışma dizinini almadan önce bunu içe aktarabiliriz:
from pathlib import Path
cwd = Path.cwd()print(cwd)Altyapı:
Path.cwd()'nin yazdırılan çıktısı, os.getcwd() tarafından döndürülen değere benzer görünür. Ancak Path.cwd() bir string döndürmez. Bunu, döndürülen nesnenin türünü yazdırarak veya repr() kullanarak resmi string gösterimini görüntüleyerek doğrulayabiliriz:
Windows bilgisayarda, Path.cwd() bir WindowsPath nesnesi döndürür.
PosixPath ve WindowsPath nesneleri, çapraz platform programları etkinleştirmek için benzer işlevler sağlar. Bu nesnelerin bazı öznitelikleri şunlardır:
Mümkün olduğunda, daha modern olan ve yollarla çalışmayı kolaylaştıran pathlib modülünü kullanmak tercih edilir. Daha fazla bilgi edinmek isterseniz bu Python'da pathlib kullanımı için kapsamlı kılavuzu okuyabilirsiniz.
Geçerli Dizinle Çalışma
Python programları sıklıkla yolu değiştirmeye ihtiyaç duyar; örneğin, bir alt klasöre dosya kaydetmek için. Geçerli çalışma dizinimizde yeni bir alt dizin oluşturmamız ve yeni klasöre bir metin dosyası kaydetmemiz gerektiğini varsayalım.
os modülünü kullanma
os modülündeki getcwd() fonksiyonu bir string döndürür. Bu nedenle, yolu değiştirmek için bu stringi elle düzenlemek mümkündür. Ancak gerekli düzenlemeler, farklı sistemlerin farklı yol biçimlerine sahip olması nedeniyle işletim sistemine göre değişir. Daha iyi bir seçenek os.path.join() kullanmaktır:
import os
cwd = os.getcwd()
output_path = os.path.join(cwd,"testing_os")print(output_path)Altyapı:
os.path.join() tarafından döndürülen yol, kullanılan işletim sistemi için doğru biçimdedir. Bu, yeni yolla birlikte bir string döndürür. Bu alt klasörün var olup olmadığını, Boolean döndüren os.path.exists() ile kontrol edebiliriz:
Bu, output_path tarafından temsil edilen yolun henüz var olmadığını gösterir. os modülü bu klasörü oluşturmak için araçlar sağlar. os.mkdir() fonksiyonu yeni bir dizin oluşturur:
Yeni alt klasör artık mevcut ve bu klasöre yeni dosyalar kaydedilebilir:
output_file = os.path.join(output_path,"test.txt")withopen(output_file,"w")asfile:file.write("Testing path modification with the 'os' module")Altyapı:
output_file değişkeni, tam yoluyla birlikte hedef çıktı dosyasının adını içerir. Bu metin dosyası, geçerli çalışma dizinindeki /testing_os alt klasöründe oluşturulur.
Bir klasördeki tüm öğeleri os.listdir() kullanarak da listeleyebiliriz:
for item in os.listdir(output_path):print(item)Altyapı:
os.listdir() fonksiyonu, dizindeki tüm öğeleri içeren bir liste döndürür. Bu kod, listedeki her dosya veya klasörü ayrı satırda göstermek için listede yineleme yapar. Bu örnekte dizin, tek bir metin dosyası içermektedir.
pathlib modülünü kullanma
Daha yeni olan pathlib modülü de yeni yollar oluşturmak için araçlar sunar. Bu modül, öğeleri bir yolda birleştirmek için eğik çizgi / operatörünü kullanır. Bu, sayısal veri türlerinde bölme için kullanılan operatörle aynıdır; aynı zamanda POSIX işletim sistemlerinde dosya yollarında kullanılan karakterdir. Yeni bir yol oluşturalım ve halihazırda var olmadığını kontrol edelim:
pathlib'daki diğer araçlarda olduğu gibi, döndürülen değer bir string değildir. Bunun yerine bir PosixPath veya WindowsPath nesnesidir. Tam yol olmadan dosya veya klasör adını görüntülemek için .name özniteliğini kullanabiliriz:
for item in Path.iterdir(output_path):print(item.name)Altyapı:
Oysa os.listdir() bir liste döndürürken, pathlib.Path.iterdir() bir generator nesnesi döndürür (bir hatırlatmaya ihtiyaç duyarsanız bu Python Yineleyiciler ve Üreteçler eğitimini okuyabilirsiniz):
<generator object Path.iterdir at 0x1036b2c20>Altyapı:
Bu davranış, modern Python'da en iyi uygulamaları takip eder; çünkü yineleyiciler ve üreteçler belirli durumlarda daha verimlidir.
Geçerli Çalışma Dizinini (CWD) Değiştirme
Geçerli çalışma dizinini bir Python programının içinden doğrudan os.chdir() kullanarak değiştirmek de mümkündür. Bu işlem doğrudan yol ile ilgili olmadığından, pathlib içinde bunun bir alternatifi yoktur. Ancak yine de pathlib.Path nesnelerini argüman olarak kullanabiliriz:
import os
from pathlib import Path
cwd = Path.cwd()print(cwd)
os.chdir(cwd.parent)
cwd = Path.cwd()print(cwd)Altyapı:
Çalışma dizini şimdi değişti. Sembolik bağların doğru şekilde ele alındığından emin olmak için cwd.parent.resolve() da kullanılabilir. os.chdir() içindeki argüman, os modülündeki fonksiyonlar tarafından döndürülen yollar gibi bir string de olabilir.
Program içinde çalışma dizinini değiştirirken beklenmedik davranışlar olmamasını sağlamak için dikkatli olmak gerekir.
En İyi Uygulamalar ve İpuçları
Python'da yollarla çalışırken bazı en iyi uygulamalar ve ipuçları şunlardır:
Sonuç
Dosya yollarında gezinmek ve onları değiştirmek, birçok Python programında yaygın bir gereksinimdir. os modülü bu görevleri ele almak için geleneksel fonksiyonları sağlarken, pathlib modülü daha modern, nesne yönelimli bir yaklaşım sunar. pathlib kullanmak yalnızca birçok işlemi basitleştirmekle kalmaz, aynı zamanda kodunuzun çapraz platform olmasını ve daha okunabilir kalmasını sağlar.
İster os kullanan mevcut bir kod tabanını sürdürüyor olun, ister pathlib'den yararlanabileceğiniz yeni bir projeye başlıyor olun, her iki modülü ve yeteneklerini anlamak, herhangi bir Python projesinde yolları yönetme esnekliği ve özgüveni kazandıracaktır.
Python öğrenme yolculuğunuza şu kurslarla devam edebilirsiniz:
Malta Üniversitesi’nde lisans düzeyinde Fizik ve Matematik okudum. Ardından Londra’ya taşındım ve Imperial College’da Fizik alanında doktoramı tamamladım. İnsan retinasını görüntülemek için yeni optik teknikler üzerine çalıştım. Şimdi Python hakkında yazmaya, Python’u anlatmaya ve Python öğretmeye odaklanıyorum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Birçok Python programı, dosya sistemi içinde dosya okumak ve yazmak için gezinmeye ihtiyaç duyar. Yaygın bir işlem, sıkça CWD olarak kısaltılan geçerli çalışma dizinini almaktır.
Python'da dosya sistemi yollarına erişmek için kullanılabilecek iki ana modül vardır:
osmodülü vepathlibmodülü.osmodülü, geçerli çalışma dizinini almanın geleneksel yaklaşımını sunar ve yollar ve dosya sistemiyle çalışır.pathlibise daha yeni bir modül olup, nesne yönelimli, sağlam ve çapraz platform bir yaklaşım sunar.Bu eğitimde, geçerli çalışma dizinini alma ve üzerinde işlem yapma yöntemlerini inceliyorum. Python hakkında daha fazla bilgi edinmek isterseniz, diğer bazı blog yazılarıma da göz atabilirsiniz:
Python: Geçerli Çalışma Dizini (CWD) Nasıl Alınır
Geçerli çalışma dizini, bir Python programının çalıştırıldığı dizindir. Göreli dosya yolları için bir referans noktası görevi görür ve programın dizin hiyerarşisi içindeki dosya ve kaynaklara erişmesini sağlar.
osvepathlibmodüllerini kullanarak geçerli çalışma dizinine nasıl erişileceğine bakalım ve iki çözümü karşılaştıralım.os.getcwd()Kullanımıosmodülü, bilgisayarın işletim sistemine erişim sağlar.getcwd()fonksiyonu geçerli çalışma dizinini getirir:Çıktı, betiği içeren dizinin yolunu gösterir. Yolun biçimi işletim sistemine bağlıdır. Yukarıdaki çıktı, Linux, Unix ve macOS gibi POSIX işletim sistemleri içindir.
Aynı yol Windows sistemde şu şekilde görüntülenir:
os.getcwd()tarafından döndürülen değer bir string'dir:Bu nedenle, bu yolla çalışmak için string metotlarını ve diğer string işlemlerini kullanmamız gerekir.
pathlib.Path.cwd()KullanımıPython 3.4, dosya yollarına erişmek ve onları işlemek için nesne yönelimli bir yaklaşım sunan
pathlibmodülünü tanıttı.pathlib'deki ana sınıfPath'tir; geçerli çalışma dizinini almadan önce bunu içe aktarabiliriz:Path.cwd()'nin yazdırılan çıktısı,os.getcwd()tarafından döndürülen değere benzer görünür. AncakPath.cwd()bir string döndürmez. Bunu, döndürülen nesnenin türünü yazdırarak veyarepr()kullanarak resmi string gösterimini görüntüleyerek doğrulayabiliriz:Windows bilgisayarda,
Path.cwd()birWindowsPathnesnesi döndürür.PosixPathveWindowsPathnesneleri, çapraz platform programları etkinleştirmek için benzer işlevler sağlar. Bu nesnelerin bazı öznitelikleri şunlardır:Mümkün olduğunda, daha modern olan ve yollarla çalışmayı kolaylaştıran
pathlibmodülünü kullanmak tercih edilir. Daha fazla bilgi edinmek isterseniz bu Python'da pathlib kullanımı için kapsamlı kılavuzu okuyabilirsiniz.Geçerli Dizinle Çalışma
Python programları sıklıkla yolu değiştirmeye ihtiyaç duyar; örneğin, bir alt klasöre dosya kaydetmek için. Geçerli çalışma dizinimizde yeni bir alt dizin oluşturmamız ve yeni klasöre bir metin dosyası kaydetmemiz gerektiğini varsayalım.
osmodülünü kullanmaosmodülündekigetcwd()fonksiyonu bir string döndürür. Bu nedenle, yolu değiştirmek için bu stringi elle düzenlemek mümkündür. Ancak gerekli düzenlemeler, farklı sistemlerin farklı yol biçimlerine sahip olması nedeniyle işletim sistemine göre değişir. Daha iyi bir seçenekos.path.join()kullanmaktır:os.path.join()tarafından döndürülen yol, kullanılan işletim sistemi için doğru biçimdedir. Bu, yeni yolla birlikte bir string döndürür. Bu alt klasörün var olup olmadığını, Boolean döndürenos.path.exists()ile kontrol edebiliriz:Bu,
output_pathtarafından temsil edilen yolun henüz var olmadığını gösterir.osmodülü bu klasörü oluşturmak için araçlar sağlar.os.mkdir()fonksiyonu yeni bir dizin oluşturur:Yeni alt klasör artık mevcut ve bu klasöre yeni dosyalar kaydedilebilir:
output_filedeğişkeni, tam yoluyla birlikte hedef çıktı dosyasının adını içerir. Bu metin dosyası, geçerli çalışma dizinindeki/testing_osalt klasöründe oluşturulur.Bir klasördeki tüm öğeleri
os.listdir()kullanarak da listeleyebiliriz:os.listdir()fonksiyonu, dizindeki tüm öğeleri içeren bir liste döndürür. Bu kod, listedeki her dosya veya klasörü ayrı satırda göstermek için listede yineleme yapar. Bu örnekte dizin, tek bir metin dosyası içermektedir.pathlibmodülünü kullanmaDaha yeni olan
pathlibmodülü de yeni yollar oluşturmak için araçlar sunar. Bu modül, öğeleri bir yolda birleştirmek için eğik çizgi/operatörünü kullanır. Bu, sayısal veri türlerinde bölme için kullanılan operatörle aynıdır; aynı zamanda POSIX işletim sistemlerinde dosya yollarında kullanılan karakterdir. Yeni bir yol oluşturalım ve halihazırda var olmadığını kontrol edelim:Pathsınıfının, yeni bir dizin oluşturmak için kendi.mkdir()metodu vardır:output_pathbirPosixPathveyaWindowsPathnesnesi olduğundan, yeni bir yol oluşturmak için herhangi bir yerde eğik çizgi operatörünü kullanabiliriz:Yeni metin dosyası
/testing_pathlibklasöründe oluşturulur.Pathmetodlarından.iterdir()'i bir klasördeki her öğe üzerinde gezinmek için kullanabiliriz:pathlib'daki diğer araçlarda olduğu gibi, döndürülen değer bir string değildir. Bunun yerine birPosixPathveyaWindowsPathnesnesidir. Tam yol olmadan dosya veya klasör adını görüntülemek için.nameözniteliğini kullanabiliriz:Oysa
os.listdir()bir liste döndürürken,pathlib.Path.iterdir()birgeneratornesnesi döndürür (bir hatırlatmaya ihtiyaç duyarsanız bu Python Yineleyiciler ve Üreteçler eğitimini okuyabilirsiniz):Bu davranış, modern Python'da en iyi uygulamaları takip eder; çünkü yineleyiciler ve üreteçler belirli durumlarda daha verimlidir.
Geçerli Çalışma Dizinini (CWD) Değiştirme
Geçerli çalışma dizinini bir Python programının içinden doğrudan
os.chdir()kullanarak değiştirmek de mümkündür. Bu işlem doğrudan yol ile ilgili olmadığından,pathlibiçinde bunun bir alternatifi yoktur. Ancak yine depathlib.Pathnesnelerini argüman olarak kullanabiliriz:Çalışma dizini şimdi değişti. Sembolik bağların doğru şekilde ele alındığından emin olmak için
cwd.parent.resolve()da kullanılabilir.os.chdir()içindeki argüman,osmodülündeki fonksiyonlar tarafından döndürülen yollar gibi bir string de olabilir.Program içinde çalışma dizinini değiştirirken beklenmedik davranışlar olmamasını sağlamak için dikkatli olmak gerekir.
En İyi Uygulamalar ve İpuçları
Python'da yollarla çalışırken bazı en iyi uygulamalar ve ipuçları şunlardır:
Sonuç
Dosya yollarında gezinmek ve onları değiştirmek, birçok Python programında yaygın bir gereksinimdir.
osmodülü bu görevleri ele almak için geleneksel fonksiyonları sağlarken,pathlibmodülü daha modern, nesne yönelimli bir yaklaşım sunar.pathlibkullanmak yalnızca birçok işlemi basitleştirmekle kalmaz, aynı zamanda kodunuzun çapraz platform olmasını ve daha okunabilir kalmasını sağlar.İster
oskullanan mevcut bir kod tabanını sürdürüyor olun, isterpathlib'den yararlanabileceğiniz yeni bir projeye başlıyor olun, her iki modülü ve yeteneklerini anlamak, herhangi bir Python projesinde yolları yönetme esnekliği ve özgüveni kazandıracaktır.Python öğrenme yolculuğunuza şu kurslarla devam edebilirsiniz: