Ana içeriğe geç

Python'da Geçerli Dizin (Current Directory) Nasıl Alınır

Python'da geçerli çalışma dizinini almak için os modülünden os.getcwd() veya pathlib modülünden pathlib.Path.cwd() kullanabilirsiniz.

Yapay Zeka ile Keşfedin

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:

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.

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:

import os
cwd = os.getcwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

Çı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:

C:\Users\sg\Documents\GitHub\datacamp

os.getcwd() tarafından döndürülen değer bir string'dir:

print(type(cwd))
<class 'str'>

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)
/Users/sg/Documents/GitHub/datacamp

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:

print(type(cwd))
print(repr(cwd))
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')

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:

print(cwd.parent)
print(cwd.name)
/Users/sg/Documents/GitHub
datacamp

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)
/Users/sg/Documents/GitHub/datacamp/testing_os

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:

print(os.path.exists(output_path))
False

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:

os.mkdir(output_path)
print(os.path.exists(output_path))
True

Yeni alt klasör artık mevcut ve bu klasöre yeni dosyalar kaydedilebilir:

output_file = os.path.join(output_path, "test.txt")
with open(output_file, "w") as file:
    file.write("Testing path modification with the 'os' module")

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)
test.txt

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:

from pathlib import Path
cwd = Path.cwd()
output_path = cwd / "testing_pathlib"
print(output_path)
print(Path.exists(output_path))
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
False

Path sınıfının, yeni bir dizin oluşturmak için kendi .mkdir() metodu vardır:

Path.mkdir(output_path)
print(Path.exists(output_path))
True

output_path bir PosixPath veya WindowsPath nesnesi olduğundan, yeni bir yol oluşturmak için herhangi bir yerde eğik çizgi operatörünü kullanabiliriz:

with open(output_path / "test.txt", "w") as file:
    file.write("Testing path modification with the 'pathlib' module")

Yeni metin dosyası /testing_pathlib klasöründe oluşturulur.

Path metodlarından .iterdir()'i bir klasördeki her öğe üzerinde gezinmek için kullanabiliriz:

for item in Path.iterdir(output_path):
    print(item)
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txt

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)
test.txt

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):

print(Path.iterdir(cwd))
<generator object Path.iterdir at 0x1036b2c20>

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)
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHub

Ç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:

Python'da Yollarla Çalışmak İçin En İyi Uygulamalar

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:

Stephen Gruppetta

Yazar

Stephen Gruppetta

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.

Konular

İlgili