2017-11-20 4 views
0

Ich habe Textdatei, die aus mehreren Abschnitten besteht. Abschnitte haben immer mit Nicht-Leerzeichen begonnen. Und der Unterabschnitt begann immer mit dem Raum. Auf der Grundlage von input.txt folgt mein erwartetes Ergebnis. In diesem Beispiel versuche ich nach "101" zu suchen und wenn 101 entweder in Abschnitt oder Unterabschnitt erscheint. Ich möchte Abschnitt mit Unterabschnitt anzeigen. Ich versuche, den Abschnitt zu analysieren und in dynamischer Variable zu speichern. Aber ich bin nicht sicher, wie man Abschnitt in einer Variablen dynamisch speichert.Python3: Parsing Text mit dynamischen Variablen und suchen Sie den Abschnitt ...

Eingabe.txt

test1 text101 
    aaa 
    bbb 
    ccc 

test2 text101 
    aaa 
    bbb 
    ccc 
    ddd 101 

test3 text101 - 123 

test4 text123 
    aaa 
    bbb 
    ccc 
    ddd 101 

test5 text456 
    aaa 
    bbb 
    ccc 

test6 101 
    qqq 
    ppp 

test7 text101 - 123 
test8 text102 - 123 
Test9 text101 - 123 
Test10 text102 - 123 

Python 3.0-Code:

find_txt = '101' 
result = [] 
f = open(r'\\input.txt') 
for line in f: 
    if (line[:1]!=' '): 
     result.append(line) 

print ('Result:') 
for element in result: 
    if find_txt in element: 
     print (element, end='') 

Ausgang:

test1 text101 
    aaa 
    bbb 
    ccc 

test2 text101 
    aaa 
    bbb 
    ccc 
    ddd 101 

test3 text101 - 123 

test4 text123 
    aaa 
    bbb 
    ccc 
    ddd 101 

test6 101 
    qqq 
    ppp 

test7 text101 - 123 

Test9 text101 - 123 
+0

Anstatt es in "dynamische Variable" zu speichern, speichern Sie es in einem Wörterbuch! – alfasin

Antwort

1

ich etwas anderes vorschlagen würde, die meiner Meinung nach mehr pythonic Lösung für das Problem ist: Teilen Sie die Datei in Abschnitte und filtern Sie unerwünschte Inhalte heraus. Der Algorithmus so etwas wie dieses:

  1. Lesen Sie die gesamte Datei (mit read Funktion) auf eine Variable (wir content sagen). Es wird eine Stringvariable sein. Refer: Doc
  2. Teilen Sie die Zeichenfolge mit der entsprechenden Regex (geteilt durch Startzeilen ohne Leerzeichen) in Abschnitte einschließlich der Unterabschnitte. Refer: How to use regex to split string. Sie haben eine Liste von Strings.
  3. Verwenden Sie Listenverständnis, um unerwünschte Inhalte herauszufiltern. Du wirst eine Liste haben. Example: Here
  4. Verknüpfen Sie die Liste mit dem neuen Zeilenzeichen unter Verwendung der Zeichenfolgenfunktion join. Example: Here

Viel Glück.

ps. Ich kann den Code zur Verfügung stellen, aber Sie möchten vielleicht zuerst damit wrestlen :)

Verwandte Themen