2016-05-02 18 views
3

Ich habe versucht, ein Programm zu erstellen, das die Anzahl der Tiere (Bär, Wolf, etc.) zählt und sie in Variablen setzt.Python 2.7 Schwierigkeit mit Dateien

Dies funktioniert nicht

import os 
def count_species(): 
    sal_count = 0 
    tro_count = 0 
    filename1 = animals.txt 
    if os.path.exists(animals.txt): 
     f = open(filename1, 'r') 
     for line in f:#will execute each line in the file individually 
      if line == 'Salmon': 
       sal_count +=1 
      if line == 'Trout': 
       tro_count += 1 

Aus irgendeinem Grund das Programm nicht, dass die erste Zeile == Salmon nicht registrieren. Alles andere scheint zu funktionieren. Ein Beispiel für die Datei finden Sie unter

Salmon 
Trout 
Salmon 

Was ist los?

Antwort

3

Du liest die Datei in und Iteration über die Zeilen der Datei und Überprüfung:

if line == 'Salmon': 
    .... 
if line == 'Trout': 
    .... 

Die Linie nicht unbedingt das sein mag, es am Ende Zeilenumbrüche haben könnte (was es Hier). Lesen Sie die Datei ein und entfernen Sie die Zeilenumbruchzeichen.

Eine Möglichkeit, dies zu tun:

with open(path to file, "r") as f: 
    lines = [x.strip() for x in f] 
    .... 

Sie auch nie die Datei schließen. Mit dem Context Manager müssen Sie sich nicht darum kümmern, alles zu schließen.

Wahrscheinlich möchten Sie auch hier nicht zwei if Anweisungen verwenden.

+0

+1 für 'mit' und Listenverständnis - macht den Code lesbarer, sauberer und eleganter. Erwägen Sie, einen Weg hinzuzufügen, damit OP nicht zwei "if" -Anweisungen verwenden kann, wie zum Beispiel "sal_count = lines.count ('Salmon')". –

+0

Es müssen keine Readlines aufgerufen werden. –

0

Sie können sie nicht sehen, aber Ihre erste Linie ist nicht genau die Zeichenfolge Salmon nur, wie es enthält auch newlines (oder „\ n“), die Sie von Pressen erhalten, sagen wir, ENTER.

Verwenden strip() zu entfernen Leerzeichen (das schließt Ihr newlines) aus einer Zeichenfolge, die in Ihrem Fall line ist. Ändern Sie wie folgt vor:

if line == 'Salmon': 
    ... 
if line == 'Trout': 
    ... 

in

if line.strip() == 'Salmon': 
    ... 
if line.strip() == 'Trout': 
    ... 

Auch als @Pythonista sagte immer schließen Sie die Datei. Fügen Sie etwas wie f.close() am Ende hinzu oder machen Sie etwas wie with open("filename.txt", "r") as f: ...

0

Sie könnten einfach sehen, ob dieses Wort in der Zeile vorhanden ist.

if 'Salmon' in line: 
    sal_count +=1 
if 'Trout' in line: 
    tro_count += 1