die Werte aus dem Klammern auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pindoko@yahoo.com
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 15:46

Hallo zusammen,
in der original Datei sind {...} zu sehen:

text_a {.text_b;.text_c}
text_d.{text_e;
text_f;
text_g}

das Ergebnis soll in der neuen Datei so aussehen:

text_a.text_b; text_a.text_c
text_d.text_e;text_d.text_f;text_d.text_g


wie kann man es machen?
Ich habe bei https://www.geeksforgeeks.org/python-ex ... -brackets/ etwas gefunden, aber es funktioniert nur wenn beide { und } in der gleichen Zeile sind,
in der Datei sind sie aber nicht immer in der gleichen Zeile.
Danke für Eure Hilfe!
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Dann bring doch die Textteile die zusammen gehören in eine Zeile.

Zeige Code was du bereits versucht hast und dann können wir helfen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde es mit einem parser Generator wie pyparsing lösen. Wobei ich da zu dem Format noch fragen habe. Die Punkte sind mal am identifier for der Klammer, oder mal an denen innen drin. Ist das konsistent so?
pindoko@yahoo.com
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 15:46

Es ist im original Datei so , die Klammer { ist manchmal vor dem Punkt, manchmal nach dem Punkt.
Ich habe auch schon versucht die Klammern in einer Zeile zu schreiben , aber is ist auch nicht so einfach zu machen.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Woher kommt die Datei? Wie ist das Format genau spezifiziert?
Ist das eine einmalige Sache, oder sollen regelmäßig solche Dateien konvertiert werden?
pindoko@yahoo.com
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 15:46

Die Daten sind log-Datei ( aus einem Steuergerät kommen ca. 3000 solche Dateien), die Spec-Datei weiß ich leider nicht, also es ist keine einmalige Sache.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und so genau sehen die Daten aus? Ein paar mehr Beispiele wären nicht schlecht.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Ich rate mal, dass alles was vor der Klammer ist mit jedem Teil innerhalb der Klammer komibiniert werden soll. Die Teile innerhalb sind durch Strichpunkte getrennt.
Leerzeichen und ähnliches soll dabei ignoriert werden.

Dann kann man den gesamten String an den schließenden Klammer in "Zeilen" teilen. Die Zeilen kann man jeweils in einen Teil vor und hinter der öffnenden Klammer teilen, und den hinteren Teil dann an den Strichpunkten in Einzelteile.

Dann noch geeignet zusammenfügen :-)

Code: Alles auswählen

s = """text_a {.text_b;.text_c}
text_d.{text_e;
text_f;
text_g}"""


def parse_line(line):
    prefix, completions = line.split("{")
    prefix = prefix.strip()
    for completion in completions.split(";"):
        yield prefix + completion.strip()

def parse_string(s):
    for line in s.split("}"):
        line = line.strip()
        if line:
            yield "; ".join(parse_line(line))
    
for line in parse_string(s):
    print(line)

# text_a.text_b; text_a.text_c
# text_d.text_e; text_d.text_f; text_d.text_g
Der String wäre dann einfach die gesamte Datei. Falls die Datei doch komplizierter aussieht, wird es komplizierter :-)
pindoko@yahoo.com
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 15:46

Vielen Dank für die Lösung, ich versuche sie zu implementieren. Anbei ist die echte Datei:
[rdaq] Oyvkxuav EOS_IH_Cdak_10qw:

R_HOG_ErwCtgRvsQuF1 ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HOG_ErwCtgRvsQuF1; HVAQ_wxOVl[0..3368];

OVl_EOSCtgRvs; qwtrqw_e; INGT_EOS_IH_HixiOiwx;

EOS_rpsNvsRyvvs; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HONS_wxGxpSmxxuvs;

HSGQNH_Sx[0..44]; HOG_ilHuwjpZwo;

HSZ_kxGrsCdmHmjAaHmjZif;

HSZ_kxGrsCdmHmjEdZavVvxmdvipZif;

HSZ_CdmHmjOyvk[0..8]; EOS_IH_qwtrqwNR_V.aplSusvip;

EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]{._EOS_kvxdGdowtxRmz_G; ._EOS_qrCtgRvsQuF1_G};

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G};

S_HOG_ilHuwjpZwo[0..1] (ivl SNYO)

R_HOG_ErwCtgRvsYaF1 ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HOG_ErwCtgRvsYaF1; HVAQ_wxOVl[0..3368];

OVl_EOSCtgRvs; qwtrqw_e; INGT_EOS_IH_HixiOiwx;

EOS_rpsNvsRyvvs; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HONS_wxGxpSmxxuvs;

HSGQNH_Sx[0..44]; HOG_ilHuwjpZwo;

HSZ_kxGrsCdmHmjAaHmjZif;

HSZ_kxGrsCdmHmjEdZavVvxmdvipZif;

HSZ_CdmHmjOyvk[0..8]; EOS_IH_qwtrqwNR_V.aplSusvip;

EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_qrCtgRvsYaF1_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G};

S_HOG_ilHuwjpZwo[0..1] (ivl SNYO)

R_HOG_QOZqif ORBZ HOG_QOZqif

qwtrqw_e ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

qwtrq_e ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

EOS_rpsCtgRvsHuisRmpwF1_ZC ORBZ HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs;

INGT_EOS_IH_HixiOiwx; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G} (ivl SNYO)

EOS_qrOuplF1_ZC ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs; qwtrqw_e;

INGT_EOS_IH_HixiOiwx; EOS_rpsNvsRyvvs;

EOS_rpsSusHuisRmpw; EOS_rpsSvwdSusVvzplF1; Nbq_vNvs;

Nbq_wxSbl; NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

EOS_IH_qwtrqwNR_V.aplSusvip; EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

EOS_wxSbl_ZC ORBZ HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs; INGT_EOS_IH_HixiOiwx;

EOS_rpsSusHuisRmpw; EOS_rpsSvwdSusVvzplF1; Nbq_vNvs;

Nbq_wxSbl; NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G} (ivl SNYO)

EOS_rpsCtgRvsNddF1 ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs; qwtrqw_e;

INGT_EOS_IH_HixiOiwx; EOS_rpsNvsRyvvs;

EOS_rpsSusHuisRmpw; EOS_rpsSvwdSusVvzplF1;

Nbq_vNvs; Nbq_wxSbl; NbqGdS_kxRmzSxdx;

HSGQNH_Sx[0..44]; EOS_IH_qwtrqwNR_V.aplSusvip;

EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]{._EOS_kvxdGdowtxRmz_G; ._EOS_qrCtgRvsQuF1_G; ._EOS_qrCtgRvsYaF1_G};

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

EOS_rpsSmsAaxGaqbp ORBZ EOS_rpsNvsRyvvs (ivl SNYO)

F_mtrq ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32]; HVAQ_wxOVl[0..3368];

OVl_EOS; OVl_EOSCtgRvs; qwtrqw_e; INGT_EOS_IH_HixiOiwx;

SgG_wxSyj; EOS_rpsNvsRyvvs; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl; NbqGdS_kxRmzSxdx;

HSGQNH_Sx[0..44]; EOS_IH_qwtrqwNR_V.aplSusvip;

EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]{._EOS_kvxdGdowtxRmz_G; ._EOS_qrCtgRvsQuF1_G; ._EOS_qrCtgRvsYaF1_G};

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

F_qwtrqss ORBZ EOS_rpsNvsRyvvs (ivl SNYO)

EOS_qrF1 ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

EOS_qrSvwdF1 ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

F_mtrq_qws ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32]; HVAQ_wxOVl[0..3368];

OVl_EOS; OVl_EOSCtgRvs; qwtrqw_e; INGT_EOS_IH_HixiOiwx;

SgG_wxSyj; EOS_rpsNvsRyvvs; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

EOS_IH_qwtrqwNR_V.aplSusvip; EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]{._EOS_kvxdGdowtxRmz_G; ._EOS_qrCtgRvsQuF1_G; ._EOS_qrCtgRvsYaF1_G};

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

F_qwtrqss_qws ORBZ EOS_rpsNvsRyvvs (ivl SNYO)

qwtrqw_e_qws ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

qwtrq_e_qws ORBZ EOS_rpsNvsRyvvs; EOS_rpsSvwdSusVvzplF1 (ivl SNYO)

HOG_vdGppwvRmbadx ORBZ HOG_ErwCtgRvsQuF1; HOG_ErwCtgRvsYaF1;

HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs;

INGT_EOS_IH_HixiOiwx; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HOG_wx[0..3191];

HOG_vdGppwvRmbadx; HONS_wxGxpSmxxuvs;

HSGQNH_Sx[0..44]; HOG_ilHuwjpZwo;

HSZ_kxCdmHmj[0..875]; HSZ_kxCdmHmjSq[0..135];

HSZ_kxGrsCdmHmjNzvxUHZif; HSZ_kxGrsCdmHmjAaHmjZif;

HSZ_kxGrsCdmHmjEdZavVvxmdvipZif;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G};

S_HOG_ilHuwjpZwo[0..1] (ivl SNYO)

HSZEUK_wxAaAmwxYakoHwq ORBZ HOG_ErwCtgRvsQuF1; HOG_ErwCtgRvsYaF1;

HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs;

INGT_EOS_IH_HixiOiwx; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HOG_wx[0..3191];

HOG_vdGppwvRmbadx; HONS_wxGxpSmxxuvs;

HSGQNH_Sx[0..44]; HSZEUK_wxAaAmwxYakoHwq;

HOG_ilHuwjpZwo; HSZ_kxCdmHmj[0..875];

HSZ_kxCdmHmjSq[0..135];

HSZ_kxGrsCdmHmjNzvxUHZif;

HSZ_kxGrsCdmHmjAaHmjZif;

HSZ_kxGrsCdmHmjEdZavVvxmdvipZif;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G};

S_HOG_ilHuwjpZwo[0..1] (ivl SNYO)

EOS_rpsErwNdd ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HVAQ_wxOVl[0..3368]; OVl_EOS; OVl_EOSCtgRvs; qwtrqw_e;

INGT_EOS_IH_HixiOiwx; EOS_rpsNvsRyvvs;

EOS_rpsSusHuisRmpw; EOS_rpsSvwdSusVvzplF1; Nbq_vNvs;

Nbq_wxSbl; NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

EOS_IH_qwtrqwNR_V.aplSusvip; EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]{._EOS_kvxdGdowtxRmz_G; ._EOS_qrCtgRvsQuF1_G; ._EOS_qrCtgRvsYaF1_G};

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

EOS_IH_qwtrqwNR_V.jyrrmd

ORBZ HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs;

INGT_EOS_IH_HixiOiwx; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

EOS_IH_qwtrqwNR_V.aplSusvip;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G}

.aplSusvip

ORBZ HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs;

INGT_EOS_IH_HixiOiwx; EOS_rpsSusHuisRmpw;

EOS_rpsSvwdSusVvzplF1; Nbq_vNvs; Nbq_wxSbl;

NbqGdS_kxRmzSxdx; HSGQNH_Sx[0..44];

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G}

EOS_IH_qwtrqwCT1_V ORBZ NSG_xuSiqbpuvs; SdzK_Nfb_L_Iip[0..32];

HVAQ_wxOVl[0..3368]; OVl_EOSCtgRvs; qwtrqw_e;

INGT_EOS_IH_HixiOiwx; EOS_rpsNvsRyvvs;

EOS_rpsSusHuisRmpw; EOS_rpsSvwdSusVvzplF1;

Nbq_vNvs; Nbq_wxSbl; NbqGdS_kxRmzSxdx;

HSGQNH_Sx[0..44]; EOS_IH_qwtrqwNR_V.aplSusvip;

EOS_IH_qwtrqwCT1_V;

S_INGT_EOS_IH_HixiOiwx{[0]._EOS_kvxdGdowtxRmz_G;

[0]._EOS_vNvsZuvCtgRvsHuis_G;

[0]._EOS_xuCx1CtgRvsHuisF1_G}

\dmwypx ORBZ HONS_wxGxpSmxxuvs; HOG_ilHuwjpZwo; HSZ_kxGrsCdmHmjAaHmjZif;

HSZ_kxGrsCdmHmjEdZavVvxmdvipZif; HSZ_CdmHmjOyvk[0..8];

GAiqm; wxRmwypx; wxExxduj; xuHurr; S_HOG_ilHuwjpZwo[0..1]
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja, das macht das ganze noch interessanter: die geschweiften Klammern können geschachtelt sein.
Da ist wohl die einfachste Lösung pyparsing zu benutzen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist das kodiert? Denn das kann ja kein Mensch lesen.
pindoko@yahoo.com
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 15:46

Ja es ist kodiert, ich kann Euch die echten Dateien leider nicht geben, die gehören mir nicht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Frage ist halt, wieviel von dem jetzt durch diese Obfuskierung da reinkommt, und wieviel echt ist. ZB die \, sind die syntaktische Elemente, oder Artefakte. Etc.
Antworten