6

你能解释一下这段代码发生了什么吗?我似乎不明白如何打开文件并逐行读取它,而不是在 for 循环中同时读取所有句子。谢谢

假设我在文档文件中有这些句子:

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
4

2 回答 2

8

神奇之处在于:

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

Pythonfile对象的特殊之处在于它们可以在 for 循环中进行迭代。在每次迭代中,它检索文件的下一行。因为它包含行中的最后一个字符,可能是换行符,所以检查和删除最后一个字符通常很有用。

于 2012-11-13T02:18:24.517 回答
7

正如 Moshe 所写,可以迭代打开的文件对象。只是,它们不是filePython 3.x 中的类型(就像它们在 Python 2.x 中一样)。如果文件对象以文本模式打开,则迭代单位是一个文本行,包括\n.

您可以使用line = line.rstrip()删除\n加号尾随空格。

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

代码中有一个小错误。打开的文件应始终关闭。我的意思是f.close()在for循环之后使用。或者,您可以将 open 包装到with将为您关闭文件的较新构造——我建议您习惯后一种方法。

于 2012-11-13T09:11:40.970 回答