2012-11-13 17 views
6

Czy możesz wyjaśnić, co się dzieje w tym kodzie? Nie wydaje mi się, aby zrozumieć sposób otwierania pliku i czytania go wiersz po wierszu zamiast wszystkich zdań w tym samym czasie w pętli for. Dziękipython3 otwieranie plików i czytanie linii

Powiedzmy mam te zdania w pliku dokumentu:

cat:dog:mice 
cat1:dog1:mice1 
cat2:dog2:mice2 
cat3:dog3:mice3 

Oto kod:

from sys import argv 

filename = input("Please enter the name of a file: ") 
f = open(filename,'r') 

d1ct = dict() 
print("Number of times each animal visited each station:") 
print("Animal Id   Station 1   Station 2") 

for line in f: 
    if '\n' == line[-1]: 
      line = line[:-1] 
    (AnimalId, Timestamp, StationId,) = line.split(':') 
    key = (AnimalId,StationId,) 
    if key not in d1ct: 
      d1ct[key] = 0 
    d1ct[key] += 1 

Odpowiedz

7

Magia jest pod adresem:

for line in f: 
    if '\n' == line[-1]: 
      line = line[:-1] 

Python file obiektów są specjalne w tym, że mogą być iterowane w pętli for. Przy każdej iteracji pobiera następny wiersz pliku. Ponieważ zawiera on ostatni znak w linii, który może być znakiem nowej linii, często warto sprawdzić i usunąć ostatni znak.

+0

Ta odpowiedź była dla mnie pomocna. Dziękuję :) – KestutisIT

7

Jak napisał Moshe, obiekty otwartego pliku mogą być iterowane. Tylko, że nie są typu file w Pythonie 3.x (tak, jak były w Pythonie 2.x). Jeśli obiekt pliku jest otwarty w trybie tekstowym, jednostką iteracji jest jedna linia tekstu, w tym \n.

Możesz użyć line = line.rstrip(), aby usunąć \n oraz końcowe obszary withe.

Jeśli chcesz od razu przeczytać zawartość pliku (w ciągu wieloliniowym), możesz użyć content = f.read().

Występuje drobny błąd w kodzie. Otwarty plik powinien zawsze być zamknięty. Mam na myśli użycie f.close() po pętli for. Możesz też otoczyć otwartą konstrukcję, która zamknie plik - sugeruję przyzwyczaić się do późniejszego podejścia.

+0

Dziękuję. Odpowiedź pomogła mi :). – KestutisIT