2012-11-13 75 views
6

你能解釋一下這段代碼是怎麼回事嗎?我似乎並不瞭解 如何打開文件並逐行讀取它,而不是在for循環中同時讀取所有句子。由於python3打開文件和讀取行

比方說,我有一個文檔文件,這些句子:

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

下面是代碼:

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 

回答

7

神奇的是:

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

的Python file對象是特別的,它們可以在for循環中迭代。在每次迭代中,它都會檢索文件的下一行。由於它包含行中的最後一個字符(可能是換行符),因此檢查並刪除最後一個字符通常很有用。

+0

此答案對我有幫助。謝謝:) – KestutisIT

7

正如Moshe寫道,可以迭代打開的文件對象。只有它們不是Python 3.x中的file類型(因爲它們在Python 2.x中)。如果在文本模式下打開文件對象,則迭代單位是一條文本行,包括\n

您可以使用line = line.rstrip()刪除\n加上尾隨的空格。

如果您想一次讀取文件的內容(多行字符串),可以使用content = f.read()

代碼中有一個小錯誤。打開的文件應該始終關閉。我的意思是在for循環之後使用f.close()。或者你可以將開放包裝到更新的with結構中,以便爲你關閉文件 - 我建議習慣後面的方法。

+0

謝謝。回答幫助了我:)。 – KestutisIT