Indexi virgülle ayırma

Merhabalar, yeni yeni öğreniyorum ve biraz yardıma ihtiyacım olabilir.
Bana verilen bir Indexten liste oluşturmak istiyorum fakat mesela bu Indexin içindeki kelimeler birbirinden ayrılmamış örn.
Soyad, Ad (Yıl) Film adı [Aktörün oynadığı karakter]
Mooradian, Joseph (2005) Producers, The [Accountant]
Sullivan, Kelly (VII) (2005) Producers, The [Bavarian Peasant]
Vargo, Matthew J. (2005) Producers, The [Bavarian Peasant]

Ben şimdi bunları nasıl listeleyebilirim dictionary kullanarak?
Veya bunu listelemeden dbm kullanarak isim girildiğinde o isimle ilgili bilgiler göstertebilirmiyim?

Merhaba,

Index dediğiniz nedir acaba?

normal bir txt dosyası içinde verdiğim örnekteki gibi veriler var

Su anki haliyle en kolay regex gibi gozukuyor: ^\([^(]+\)(\(\d+\))\([^\[]+\)\[\([^\]\)\]$ (kesin hata vardir)

Elle parse etmeyi oneriyorum:

  • Satirlara ayir
  • Son parantez acmaya kadar olan kismi al
  • Kapanana kadar al
  • Son koseli paranteze kadar al…

regex kullanamıyoruz malesef

dictionary ve dbm kullanabiliyoruz

Tam olarak nasıl bir çıktı elde etmek istiyorsunuz?

Mesela şöyle bir kod yazsam, istediğiniz gibi bir çıktı mı alıyorsunuz?

def open_text(arg: str):
    with open(arg) as f:
        return f.readlines()


def split_string(arg: list):
    return [i.strip().split(", ") for i in arg]


def add_to_dict(arg: list):
    return {
        index: {
            arg[0][index_]: j
            for index_, j in enumerate(i)
        }
        for index, i in enumerate(arg[1:])
    }


data = add_to_dict(split_string(open_text("test.txt")))
print(data[0])

data[0] şöyle bir veri:

{'Soyad': 'Mooradian', 'Ad (Yıl) Film adı': 'Joseph (2005) Producers', '[Aktörün oynadığı karakter]': 'The [Accountant]'}

İsterseniz, sözlüğün anahtarlarını kullanarak bu sözlükteki bilgilere ulaşırsınız. Ama önemli olan sizin nasıl bir sözlük yapısı almak istediğiniz.

Çıktısı şu şekilde olacak; ismi kullanıcı girecek ve o isimle alakalı listeye göre hangi filmde ne zaman oynamış ve o roldeki adını verecek bana
örneğin,

Riegert, Peter (1989) That’s Adequate [Adult Baby Elroy]
Riegert, Peter (1990) Shock to the System, A [Robert Benham]
Riegert, Peter (1978) Animal House [Donald ‘Boon’ Schoenstein]

Ben Riegert Peter girdiğimde bana “Şu filmlerde şu kişi olarak şu tarihlerde oynadı” demesi gerekiyor

O zaman yukarıdaki koda bir de şu fonksiyonu eklerseniz, istediğiniz çıktıyı alırsınız sanırım.

def get_record(surname: str, name: str, d: dict):
    return [
        list(v.values()) for k, v in d.items()
        if (
            v["Soyad"] == surname
            and
            v["Ad (Yıl) Film adı"].split()[0] == name
        )
    ]

Örnek:

data = add_to_dict(split_string(open_text("test.txt")))
print(get_record(surname="Mooradian", name="Joseph", d=data))

Çıktı:

[['Mooradian', 'Joseph (2005) Producers', 'The [Accountant]']]

Ama bu kadar işleme gerek kalmadan, şöyle de yapılabilir sanırım.

def open_text(arg: str):
    with open(arg) as f:
        return f.readlines()


def get_record(surname, name, d):
    return [
        i.strip().split(", ") for i in d
        if all(j in i for j in [surname, name])
    ]


data = open_text("test.txt")
print(get_record(surname="Mooradian", name="Joseph", d=data))
1 Beğeni

Girilen Soyisim, Isım ile ilgili bilgilerin çıkmasını sağlamak istiyorum, yani program input bekleyecek ve o inputa göre listeleyecek bunları…
Ve verdiğiniz Kodda şöyle bir sıkıntı var;

McGill, Bruce (1991) Last Boy Scout, (burada virgül var) The [Michael ‘Mike’ Matthews]
McGill, Bruce (1987) End of the Line [Billy Haney]
McGill, Bruce (1978) Animal House [Daniel Simpson ‘D-Day’ Day]

Şu çıktıyı alıyorum

[[‘McGill’, ‘Bruce (1991) Last Boy Scout’, "The [Michael ‘Mike’ Matthews]"], [‘McGill’, ‘Bruce (1987) End of the Line [Billy Haney]’], [‘McGill’, “Bruce (1978) Animal House [Daniel Simpson ‘D-Day’ Day]”]]

Virgülden sonrasına dikkat

Yazdığım koda göre çıktı normal, siz nasıl bir çıktı almak istiyordunuz ki?