Çözüldü Loop ile import nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

DeathForYou

Kilopat
Katılım
28 Mayıs 2018
Mesajlar
86
Daha fazla  
Sistem Özellikleri
Intel(R) Core(TM) i3-4130 | 8 Gb DDR3 1600MHZ
Cinsiyet
Erkek
Merhaba arkadaşlar Python ile küçük bir proje yapıyorum kendime.
Önceden JavaScript ile Discord botu yapmıştım ve JavaScript ile "require" komutu ile tek seferde birden fazla dosyayı require edebiliyordum.
Örnek:

JavaScript:
const examp = require(`dosya.${içerik}.js`)

Bunun Python ile bir yolu var mı?
 
Son düzenleyen: Moderatör:
Çözüm
Commandsmodules[modul] = importlib. İmport_module(modul)
~~~~~~~~~~~~~~~^^^^^^^
Typeerror: List indices must be integers or slices, not str.
Şöyle bir hata aldım.
Benim hatam. List olarak tanımlayıp dictionary olarak kullanmak istemişim.

[ ve ] leri { ve } ile güncelleyerek moduller değişkenini dictionary yapın.

ve append kullanamazsınız dictionary de. O yüzden:
commandsModules.append(belgeName.rstrip('.py')) Burası da şöyle olacak: commandsModules[belgeName.rstrip('.py')] = ""
importlib kullanmalısın.
Python:
import importlib
moduller = ["modul1", "modul2", "modul3"]
for modul in moduller:
    moduller[modul] = importlib.import_module(modul)

Ancak daha sonradan kullanırken dict içinden çağırman gerekiyor. Şöyle:
Kod:
moduller["modul1"].init()
moduller["modul2"].doit()
 
Yapmaya çalıştığım tek seferde komut klasörün içindeki tüm Python dosyalarını import etmek. Daha sonra bu klasöre komut ekleyeceğim ve her seferinde main klasörüne import etmek istemiyorum.

İmportlib kullanmalısın.
Python:
import importlib.
moduller = ["modul1", "modul2", "modul3"]
for modul in moduller:
 moduller[modul] = importlib.import_module(modul)

Ancak daha sonradan kullanırken dict içinden çağırman gerekiyor. Şöyle:
Kod:
moduller["modul1"].init()
moduller["modul2"].doit()

Deneyeceğim.

İmportlib kullanmalısın.
Python:
import importlib.
moduller = ["modul1", "modul2", "modul3"]
for modul in moduller:
 moduller[modul] = importlib.import_module(modul)

Ancak daha sonradan kullanırken dict içinden çağırman gerekiyor. Şöyle:
Kod:
moduller["modul1"].init()
moduller["modul2"].doit()

Python:
for modul in moduller:
 moduller[modul] = importlib.import_module(modul)

Burası ne işe yarıyor.
 
Son düzenleme:
İmportlib kullanmalısın.
Python:
import importlib.
moduller = ["modul1", "modul2", "modul3"]
for modul in moduller:
 moduller[modul] = importlib.import_module(modul)

Ancak daha sonradan kullanırken dict içinden çağırman gerekiyor. Şöyle:
Kod:
moduller["modul1"].init()
moduller["modul2"].doit()

Commandsmodules[modul] = importlib. İmport_module(modul)
~~~~~~~~~~~~~~~^^^^^^^
Typeerror: List indices must be integers or slices, not str.
Şöyle bir hata aldım.
Kodum:

Python:
def wr():
 global belgelen.
 global belge.
 commands = os.scandir("./commands")

 for belge in commands:
 belgeName = belge.name
 belge = [belge.name]
 belgelen = len(belge)
 if belgeName.endswith('.py'):
  commandsModules.append(belgeName.rstrip('.py'))

wr()
print(commandsModules)
for modul in commandsModules:
 commandsModules[modul] = importlib.import_module(modul)

Ben eklemek yerine komut dosyalarının ismini for döngüsü ile "commandsmodules" array içine ekledim ve doğal olarak str oluyor.
 
Commandsmodules[modul] = importlib. İmport_module(modul)
~~~~~~~~~~~~~~~^^^^^^^
Typeerror: List indices must be integers or slices, not str.
Şöyle bir hata aldım.
Benim hatam. List olarak tanımlayıp dictionary olarak kullanmak istemişim.

[ ve ] leri { ve } ile güncelleyerek moduller değişkenini dictionary yapın.

ve append kullanamazsınız dictionary de. O yüzden:
commandsModules.append(belgeName.rstrip('.py')) Burası da şöyle olacak: commandsModules[belgeName.rstrip('.py')] = ""
 
Son düzenleme:
Çözüm
Python:
commandsModules = {}

def wr():
    global belgelen
    global belge
    commands = os.scandir("./commands")

    for belge in commands:
        belgeName = belge.name
        belge = [belge.name]
        belgelen = len(belge)
        if belgeName.endswith('.py'):
            commandsModules[belgeName.rstrip('.py')] = ""

wr()
print(commandsModules)
for modul in commandsModules:
    commandsModules[modul] = importlib.import_module(modul)

Kodun son hali. Çok teşekkür ederim çalıştı. @Nizel G
Belki birine lazım olur diye kodu şöyle bırakayım.

İmportlib kullanmalısın.
Python:
import importlib.
moduller = ["modul1", "modul2", "modul3"]
for modul in moduller:
 moduller[modul] = importlib.import_module(modul)

Ancak daha sonradan kullanırken dict içinden çağırman gerekiyor. Şöyle:
Kod:
moduller["modul1"].init()
moduller["modul2"].doit()

Son bir sorum daha olacakta.

Python:
moduller["modul1"].init()
moduller["modul2"].doit()

Sonundaki ".init" ve ".doit" farkı nedir? Ne işe yarıyorlar?
 
Son bir sorum daha olacakta.
Python:
moduller["modul1"].init()
moduller["modul2"].doit()

Sonundaki ".init" ve ".doit" farkı nedir? Ne işe yarıyorlar?
Nasıl kullanılır için örnek olsun diye yazdım orayı. Bir işlevi yok.
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı