python打开文件和阅读行

时间:2012-11-13 02:13:07

标签: python-3.x

您能解释一下这段代码中发生了什么吗?我似乎不明白 如何在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

2 个答案:

答案 0 :(得分:8)

魔术在:

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

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

答案 1 :(得分:7)

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

您可以使用line = line.rstrip()删除\n以及尾随空间。

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

代码中存在一个小错误。应始终关闭打开的文件。我的意思是在for循环后使用f.close()。或者你可以将open打开到更新的with结构,它将为你关闭文件 - 我建议你习惯后来的方法。