2017-06-01 2 views
0

Ich habe einige Namen in einer Liste, ich möchte die Namen mit einigen Sätzen kombinieren, die ich in einer Textdatei habe.Wie kann ich for Schleife mit Listenelementen kombinieren

dies mein test.txt ist, enthält es folgende:

This is line 1 
This is line 2 
This is line 3 

Das ist mein Code ist die Textdatei und Listenelement

name = ['anjana','ashish','dilip','gaurav','grishma','hira','ishika','manoj', 
     'muna'] 
x=1 


with open('test.txt', mode = 'r+', encoding="utf=8") as f: 

for y in name: 
    for line in f: 
     if line.rstrip(): 
      line_strip = line.strip() 
      tag_strip = '<s> ' + line.strip() +' </s>' 
      subject = str(name[0]) 
      tag_end = ' (' + subject +'_'+ str(x).zfill(2) +')' 
      print (tag_strip +tag_end) 


      x = x+1 

mit diesem verbinden ich für das gewünschte Ergebnis bekommen nur der erste Punkt in der Liste. es iterieren nicht durch alle Elemente

<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 

was ich suche

<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 
.......... so on until 
<s> This is line 1 </s> (muna_01) 
<s> This is line 2 </s> (muna_02) 
<s> This is line 3 </s> (muna_03) 

Antwort

1

Es gibt mehrere Probleme. Sie können die Methode seek() verwenden, um den Cursor nach jeder Iteration an den Anfang der Datei zu verschieben. Zweitens verwenden Sie nur das erste Element aus der name-Liste anstelle der Variablen y. Dies hat die meisten notwendigen Verbesserungen:

Bitte beachten Sie die richtige Zeilenformatierung. Niemand verwendet ein Leerzeichen pro Einrückung. Verwenden Sie stattdessen 4. Und weitere beschreibende Namen wie

names = ['anjana', 'ashish', ...] 
(...) 
for name in names: 
+0

Hey danke! Ich habe "x = 1" unter "für y im Namen" verschoben und 'x = x + 1' nach "print (tag_strip + tag_end)" hinzugefügt. Genau das, was ich brauchte. Ich wusste nichts über ** suchen **. Will hineinschauen. Danke noch einmal! – choman

+0

Froh ich könnte helfen :) – gonczor

2

Nachdem die Datei, die Sie haben durch sie wiederholt geöffnet ist und for line in f nicht geben Ihnen keine weiteren Elemente .

Versuchen noch with open('test.txt', mode = 'r+', encoding="utf=8") as f nach for y in name

besser setzen, Ihre Linien in einmal gelesen und die Namen hinzufügen, danach die IO-Komponente des Programms zu reduzieren.

1

Wenn Sie for line in f sagen, sind Sie verbrauchen die Daten aus der Datei behandeln. Sie sollten stattdessen die Daten speichern und mehrmals darüber iterieren. Sie können f.readlines() sagen, um alle Zeilen zu erhalten, dann verwenden Sie sie in Ihrer Schleife wiederholt.

2

Versuchen Sie, den folgenden Ansatz:

>>> txtdata = """This is line 1 
... This is line 2 
... This is line 3""" 
>>> 
>>> name = ['anjana','ashish','dilip','gaurav','grishma','hira','ishika','manoj','muna'] 
>>> 
>>> result = [] 
>>> 
>>> for i in name: 
...  for idx, data in enumerate(txtdata.splitlines(), 1): 
...    result.append('<s> ' + data + ' </s>' + ' (' + i + '_0' + str(idx) + ')') 
... 
>>> for i in result: 
...  print(i) 
... 
<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 
... 
... 
<s> This is line 1 </s> (muna_01) 
<s> This is line 2 </s> (muna_02) 
<s> This is line 3 </s> (muna_03) 
>>> 
+0

Diese Antwort ist richtig, obwohl mehr Speicherverbrauch. – gonczor

+0

@gonczor, ja du hast recht, da er es nur ausdruckt. während ich das Ergebnis in einer Liste speichern und dann ausdrucken, ist es eine Frage der Anwendung. – JkShaw

Verwandte Themen