Dosya Yolu Hakkında

,

Arkadaşlar merhaba,

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.

Merhaba,

Dosya yolları neler?

Evet, haklısınız.

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.

Program hangi dosyalari kullaniyor? Kullanici adina gore degisen dizinler var ise, soyle bir cozum uygulanabilir:

import pathlib

config_dir = pathlib.Path.home() / ".config/myconfigfiles"

f = open(str(config_dir/"config.json"), "a")

Not: pathlib dosyalari bolme (/) operatoru ile birlestirmeye ve dizin islemlerine yarar.

Merhaba,

Yukarıdaki işlem Os modülü ile mümkün müdür.?
Saygılarımla.

yapmaya çalıştığınn şey proje klasörün içindemi dışındamı

Mesela,

os.remove(‘D:\Python\Kod Çalışmaları\Yapacaklarım\Ekipman Listesi-bakım-arıza uygulaması\Ekipman listesi yazılım\Gorsel Calisma’+os.sep + textt)

os.chdir(‘D:\Python\Kod Çalışmaları\Yapacaklarım\Ekipman Listesi-bakım-arıza uygulaması\Ekipman listesi yazılım\Gorsel Calisma’)

Proje Klasörünün içinde. Ama yol belirtmem gerekiyor. Daha doğrusu yeni klasörler açtığım için yol belirtmem gerektiğini düşünüyorum.

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.

Merhaba,

Diyelimki yeni bir klasör oluşturdum. *.txt dosyamı bu klasöre kaydetmek istiyorum. Yukarıdaki mantıkla, aşağıdaki kod yazılabilir mi?

os.mkdir(os.sep.join(‘Dizin’, ‘*.txt’))

os.mkdir klasör oluşturuyor, dosya değil.

@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.

@Emre_Kahriman bkz: Soru Sorarken Sıkça Düşülen Hatalar #4 ve #9