【发布时间】:2012-07-30 17:17:36
【问题描述】:
我的问题与 Python 中的文件输入有关,使用 open()。我有一个包含 3 行的文本文件 mytext.txt。
我正在尝试对这个文件做两件事:打印行数和打印行数。
我尝试了以下代码:
input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
print line
for line in input_file:
count_lines += 1
print 'number of lines:', count_lines
结果:它正确打印了 3 行,但打印了“行数:0”(而不是 3)
我找到了两种解决方法,并把它打印出来3:
1) 我使用一个循环而不是两个
input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
print line
count_lines += 1
print 'number of lines:', count_lines
2) 在第一个循环之后,我再次定义 input_file
input_file = open('mytext.txt', 'r')
count_lines = 0
for line in input_file:
print line
input_file = open('mytext.txt', 'r')
for line in input_file:
count_lines += 1
print 'number of lines:', count_lines
在我看来,input_file = ... 的定义似乎只对一个循环有效,就好像在我将它用于循环后它被删除了一样。但我不明白为什么,我可能还不是 100% 清楚,variable = open(filename) 在 Python 中是如何处理的。
顺便说一句,我发现在这种情况下最好只使用一个循环。但是,我觉得我必须弄清楚这个问题,因为在某些情况下我可以/必须使用它。
【问题讨论】:
-
如果你想处理线,为什么不使用
readlines() -
如果您突然将它用于大文件,readlines 将使您的机器抖动并可能崩溃。通常一次读一行会更好。
-
您也可以使用 readline(),一次读取一行。或者为了避免与 readlines 发生颠簸/崩溃,请使用可选的大小提示参数:readlines(size hint)。这将返回可以放入“大小提示”缓冲区的整行数。