Python komutla .py dosyası nasıl düzenlenir?

TheAny

Megapat
Katılım
18 Aralık 2018
Mesajlar
7.626
Makaleler
13
Çözümler
102
Merhaba, sorum biraz ilginç olacak. Bir fonksiyonla, .py dosyasının içine kod bloğu eklemek istiyorum fakat bunu elle değil bir makroyla yada scriptle yapmak istiyorum. Yani atıyorum;

Python:
def func():
    #...fonksiyon işlemleri...
   
def anotherfunc():
    #...fonksiyon işlemleri...
   
#... diğer fonksiyon, makro/script neyse artık buraya
#def foo():
#     ...fonksiyon işlemleri...
#ekleyecek

isteğim bu.

Bunu nasıl sağlarım? Filestream ile eklenecek satır sayısı kadar yeni satır eklemeyi düşündüm ama her seferinde değişeceği için bunu makroya nasıl yedirebilirim bilmiyorum. Bir de filestream kullanarak yaptığım değişiklikler genelde ekleme yapmıyor, ekleme yapsa kolay olacak ama satırı değiştiriyor.
 
Bir de filestream kullanarak yaptığım değişiklikler genelde ekleme yapmıyor, ekleme yapsa kolay olacak ama satırı değiştiriyor.
Satır değiştiriyor derken? Kayma mı var? Template string kullanın öyleyse.
Python:
with open("dosya.py", "a") as dosya:
    dosya.write("""
\n\n
def fonk():
    print("a")
""")
Gibi. Koddaki amacım sadece templateler. Taslak seviyesinde.
 
Satır değiştiriyor derken? Kayma mı var? Template string kullanın öyleyse.
Python:
with open("dosya.py", "a") as dosya:
    dosya.write("""
\n\n
def fonk():
    print("a")
""")
Gibi. Koddaki amacım sadece templateler. Taslak seviyesinde.
Kayma değil. def func yazıyorsa ve ben satıra ekleme olarak def lol yazarsam def lolc oluyor. Kişisel bir projede çalışıyorum, voice assistant yapıyorum speech-recognition lib ile. Komutları sınıf oluşturup onun içine ekledim, komutların aranması içinde başka bir fonksiyon yaptım. Tkinter ile oluşturduğum bir GUI komut ekleme sayfası var, bunu kullanarak sınıfın içerisine yeni fonksiyonu eklemek istiyorum.
 
Merhaba, sorum biraz ilginç olacak. Bir fonksiyonla, .py dosyasının içine kod bloğu eklemek istiyorum fakat bunu elle değil bir makroyla yada scriptle yapmak istiyorum. Yani atıyorum;

Python:
def func():
    #...fonksiyon işlemleri...
  
def anotherfunc():
    #...fonksiyon işlemleri...
  
#... diğer fonksiyon, makro/script neyse artık buraya
#def foo():
#     ...fonksiyon işlemleri...
#ekleyecek

isteğim bu.

Bunu nasıl sağlarım? Filestream ile eklenecek satır sayısı kadar yeni satır eklemeyi düşündüm ama her seferinde değişeceği için bunu makroya nasıl yedirebilirim bilmiyorum. Bir de filestream kullanarak yaptığım değişiklikler genelde ekleme yapmıyor, ekleme yapsa kolay olacak ama satırı değiştiriyor.
Yani bir .py dosyasına komut ekleyeceksiniz ama bunu komutlar ile yapacaksınız değil mi?
 
Dosyaya ekleme yapmak istiyorsan önce okuyup buffer üzerinde ekleme yapıp tekrar sıfırdan yazman gerekiyor aksi halde append modda mevcut kayıtlı verinin üzerine yazar.
 
Bu şekilde deneyince ne oluyor?
Python:
funciton = """

def lol():
    print('Hello')"""

f = open("mod.py", "a")
try:
    f.write(function)
except IOError:
    print('Write error.')
finally:
    f.close()
Eve gidince deneyeyim.

Dosyaya ekleme yapmak istiyorsan önce okuyup buffer üzerinde ekleme yapıp tekrar sıfırdan yazman gerekiyor aksi halde append modda mevcut kayıtlı verinin üzerine yazar.
Anladım. Peki her birini yeni bir dosyada oluştursam, ardından bir diğer dosyada tüm fonksiyonları toplasam daha mı kolay olur?

Yani demek istediğim, komut.py komut2.py komut3.py, bunların hepsini responseImports.py'a import edip onu da responses.py'a import etsem getResponse fonksiyonun da çağrı yapsam olabilir sanırım.
 
Son düzenleme:
Yani nasıl kolayına gelecekse öyle yap, satır sonuna ekleme yapmak için append mod yeterli ancak dediğim gibi belirli bir indeksten sonra ekleme yapacaksan buffer üzerinde ekleyip sıfırdan yazmak gerekli. Örn;

Python:
def func1():
    pass
def func2():
    pass #4. satırdan itibaren fonksiyon ekle
def func3():
    pass

Şöyle bir şey kullanarak;
Python:
s  = "\ndef add_function():\n   print('message')\n\n"

with open("file.py", "r") as f:
    d = f.readlines()
d.insert(4, s)

with open("file.py", "w") as f:
    d = "".join(d)
    f.write(d)

bu çıktıyı alırız;

Python:
def func1():
    pass
def func2():
    pass

def add_function():
   print('message')

def func3():
    pass
 

Yeni konular

Geri
Yukarı