2017-05-11 1 views
0

Ich habe einen Code zum Abrufen von wissenschaftlicher Literatur, gegeben Code unten fetch "Xml" -Datei und extrahieren Sie gewünschte Daten oder Zeilen aus der großen Datei.Was ist die richtige Art und Weise zu verwenden "oder" mit If-Bedingung in Python

aus dieser Datei möchte ich zwei Zeilen gedruckt werden, die Tag "AbstractText" oder "Titel" enthält, wenn ich entweder "AbstractText" oder "Title" mit "if" druckt wünschenswert out Put aber wenn ich beide verwendet Die Tags mit dem Anweisungscode "oder" beginnen alle Zeilen zu drucken.

-Code, die nicht korrekt ausgeführt wird:

def fetch_abstract(pmid): 
     handle = efetch(db='pubmed', id=pmid, retmode='xml') 
     lines = handle.readlines() 

     for line in lines: 
      if "<AbstractText>" or "<Title>" in line: 
       print line, 

    fetch_abstract("19555725") 

-Code ordnungsgemäß ausgeführt wird mit "AbstractText" tag:

def fetch_abstract(pmid): 
     handle = efetch(db='pubmed', id=pmid, retmode='xml') 
     lines = handle.readlines() 

     for line in lines: 
      if "<AbstractText>" in line: 
       print line, 

    fetch_abstract("19555725") 

-Code ordnungsgemäß ausgeführt wird mit "Titel" tag:

def fetch_abstract(pmid): 
     handle = efetch(db='pubmed', id=pmid, retmode='xml') 
     lines = handle.readlines() 

     for line in lines: 
      if "<Title>" in line: 
       print line, 

    fetch_abstract("19555725") 

Wie kann ich dieses Problem lösen?

+0

Mögliche Duplikat [Verwendung oder Vergleiche mit IF-Anweisungen] (http://stackoverflow.com/questions/148042/using-or-comparisons -with-if-statements) –

Antwort

3

Sie Ihren Zustand mit in line für beide setzen sollte:

if "<AbstractText>" in line or "<Title>" in line: 

Die Art und Weise Sie hat zwei folgenden Bedingungen setzen jetzt:

"<AbstractText>" or 
"<Title>" in line 

und "<AbstractText>" ist immer true seit dem string"<AbstractText>" enthält etwas (if "nonemptystring" ist immer true). Deshalb druckst du alles.

0

Ein richtiger Weg ist, zu schreiben:

if "<AbstractText>" in line or "<Title>" in line: 

Ihr erster Versuch, if ("<AbstractText>") or ("<Title>" in line): entspricht. Ich habe die Klammern hinzugefügt, um zu betonen, wie die Linie interpretiert wird.

0

Statt

if "<AbstractText>" or "<Title>" in line: 

Verwendung

if "<AbstractText>" in line or "<Title>" in line: 
0

EDIT: Feste Syntaxfehler die Sie interessieren wie so:

def fetch_abstract(pmid): 
    handle = efetch(db='pubmed', id=pmid, retmode='xml') 
    lines = handle.readlines() 

    for line in lines: 
     if "<AbstractText>" in line or "<Title>" in line: 
      print line, 

fetch_abstract("19555725") 
+2

Das ist ein SyntaxError. –

+0

Behoben, danke @aryamccarthy – nocolberri

Verwandte Themen