2017-02-21 2 views
-1

Mit diesem Code bekomme ich die vollständige Zeile, die Name enthält. Aber ich muss diese Linie UND die nächsten 2 Zeilen bekommen. Ich habe keine Ahnung, wie ich das machen kann.Suchen Sie eine Zeile und erhalten Sie die nächsten Zeilen

def daten(s): 
for i in s: 
     if i.find('Name') >= 1: 
      daten = i 
      return daten 

Beispiel:

AAA 
Name 
CCC 
DDD 
EEE 

Ich möchte Name bekommen, CCC und DDD

+0

Welcher Typ ist 's'? –

+0

Der angegebene Code findet 'Name' nicht in den Beispieldaten. (Es hat auch einen Einrückungssyntaxfehler.) –

+0

Willkommen bei [so]! Bitte bearbeiten Sie Ihre Frage, um ein kurzes, ** vollständiges ** Programm einzufügen, das das Problem aufzeigt. Bitte geben Sie die erwartete Ausgabe ein und kopieren Sie die tatsächliche Ausgabe. Siehe [mcve] für weitere Informationen. –

Antwort

0

können Sie machen s ein Iterator, wenn es nicht schon ist man, und dann next rufen zu erhalten Die nächsten zwei Zeilen nach der Zeile mit 'Name':

def daten(s): 
    s = iter(s) 
    for line in s: 
     if line.startswith('Name'): # or more generally: if 'Name' in line: ... 
      return [line, next(s), next(s)] 
    else: 
     raise SomeException 

Wenn es keine Zeile Namen enthält, ist, oder es gibt keine Linien die Linie mit 'Name' beginnend folgenden, erhalten Sie eine Ausnahme erhalten.

+0

Die Verwendung von 'startswith' stimmt nicht mit dem Verhalten des Originalcodes überein (was möglicherweise nicht das ist, was gewünscht wird, aber immer noch ...) –

1

Dies ist eine andere Lösung - wenn s eine Datei:

def daten(s): 
    with open(s, 'r') as f: lines = f.read().splitlines() 
    for i,line in enumerate(lines): 
     if 'Name' in line: return lines[i:i+3] 

Es sucht nach dem Wort ‚Name‘ in jeder der Linien und wenn zu finden - gibt eine Liste mit dem Wort und die beiden Wörter Folgendes.

+0

Was lässt Sie glauben, dass dies etwas mit einer Datei zu tun hat? –

+0

@ScottHunter, ich vermutete es - die Beispieleingabe sieht wie eine Datei aus ... - Aber du hast Recht, nur meine Antwort bearbeitet, um genauer zu sein! – coder

0

Wenn s eine Liste, dann würde dies dem entsprechen, was der Code aber die gewünschten Elemente zurückgibt:

def daten(s): 
    for i,d in enumerate(s): 
     if d.find('Name')>=0: 
      return s[i:i+3] 

Beachten Sie, dass diese

  • nicht auf Ihrem Beispieldaten nicht funktioniert, aber Dann hat Ihr Code
  • nichts zurückgegeben, wenn nichts gefunden wurde, aber auch nicht Ihren Code
Verwandte Themen