Yaptığımız bir projede dosya yolları belirtiliyor. Projenin, setup dosyasına çevrildikten sonra başka bilgisayarda dosya yolu ile ilgili hata vereceğini düşünüyorum. Haklı mıyım.? Eğer öyle ise, bu sorunla karşılaşmamak için ne yapılabilir.? Bilgilerinizi rica ederim.
Saygılarımla.
Dosya yollarını kendi bilgisayarınızdaki dosyalara göre hard coded şekilde değil de, bazı os fonksiyonlarını kullanarak yazabilirsiniz. Siz dosya yollarını paylaşın, ona göre hangi fonksiyonları kullanmanız gerektiğini düşünelim.
Uygulamanızın bulunacağı dosyanın ismi diyelim Gorsel Calisma. Kullanıcıya da programınızı bu klasörle birlikte dağıtacaksınız diyelim. Gorse Calisma dizinin içinde yer alan herhangi bir dosyaya ulaşmak için yolu uzatmanıza gerek yok.
Örneğin bir tane txt uzantılı dosyanız var, ismi de output olsun.
Python dosyanız veya oluşturacağınız yürütülebilir dosya, bu metin dosyası ile aynı dizinde yer alıyorsa, kodu şu şekilde sadeleştirebilirsiniz:
os.remove("output.txt")
Şayet bu output.txt, bir klasörün içinde olsa ve bu klasör de yürütülebilir dosya ile aynı dizinde yer alsa o zaman da kodları şöyle kısaltabilirsiniz. Örneğin klasörün ismi Dizin olsun.
os.remove(os.sep.join(["Dizin", "output.txt"]))
Özetle, programın ihtiyaç duyacağı klasörleri ve dosyaları kullanıcılarla paylaşacaksanız, yukarıda anlattığım yaklaşım işinizi görür.
@EkremDincel’in de dediği gibi os.mkdir, klasör oluşturuyor. Eğer dosyanızı bu klasörün içinde oluşturmak istiyorsanız ve başlangıçta böyle bir klasör yoksa, os.mkdir("klasör ismi) yazarak klasörü oluşturabilirsiniz. Sonra da dosyanızı open(os.sep.join(["klasör ismi", "dosya adı"]), "w", encoding="utf-8") yazarak oluşturabilirsiniz.
Basit bir örnek:
import os
# klasörü oluşturuyoruz
os.mkdir("Dizin")
# Dosyayı oluşturalım.
with open(os.sep.join(["Dizin", "metin.txt"]), "w", encoding="utf-8") as f:
f.write("dosyaya yazmak istediğiniz metin.")
# İç içe geçmiş klasörler oluşturmak için aşağıdaki kodlara
# benzer kodlar yazarsınız.
os.makedirs(os.sep.join(["Dizin", "Alt Dizin"]))
# Bu iç içe geçmiş klasörlerde dosya oluşturalım.
with open(
os.sep.join(["Dizin", "Alt Dizin", "metin.txt"]),
"w",
encoding="utf-8"
) as f:
f.write("dosyaya yazmak istediğiniz metin.")
Edit: Bu arada bir düzeltme yapmam gerekiyor, os.sep.join() fonksiyonuna argümanları yazarken, argümanların bir liste veya bir tuple içinde olması gerekiyor. Yani os.sep.join sadece bir argüman alıyor.