通过for循环从python中的文件读取行

时间:2013-10-03 08:08:41

标签: python

我写了这段代码

for i in range(40):
    f=open('file.txt','r')
    if i%2==1:
        f.readlines()[i]

但它没有在控制台上打印任何东西。

然而,如果我这样写,它会: -

for i in range(40):
    f=open('fil.txt','r')
    if i%2==1:
        p=f.readlines()[i]
        print p

为什么会如此。 f.readlines()适用于控制台,但为什么它在循环中不起作用?

5 个答案:

答案 0 :(得分:2)

为什么第一个在控制台上打印任何内容?你不要在任何地方拨打print。第二个调用print,显然它会打印出来。

答案 1 :(得分:0)

在您的第一段代码中,您没有print语句。修复它是这样的:

for i in range(40):
    f=open('file.txt','r')
    if i%2==1:
        print(f.readlines()[i])

答案 2 :(得分:0)

您不需要每次都打开文件,并且您不需要每次都读取文件的内容(并且您在第一段代码中根本不打印):

from itertools import islice

with open('file') as fin:
    for line in islice(fin, 1, 40, 2):
        print line

以上代码将打印文件中的奇数行。

答案 3 :(得分:0)

  

f.readlines()适用于控制台

在Python解释器中,隐式打印所有值。这意味着,当您键入名称时,将自动打印其字符串表示形式:

>>> a = 'hello'
>>> a
'hello'

但是,在编写脚本时,需要使用print

a = 'hello'
print(a)

答案 4 :(得分:0)

您所指的控制台可能是interactive interpreter。在交互式解释器中,表达式的结果会自动显示,使其可以像计算器一样使用;它执行read-eval-print循环。运行准备好的程序时,不会假设打印步骤(技术上也没有读取步骤),因此如果您想要这样做,则必须请求它。

一个完全独立的问题是你如何阅读整个文件40次,每次只打算打印20行时将其分成行。我可能会像这样重写循环:

f=open('fil.txt','r')
for i in range(40):
    p=f.readline()
    if i%2==1:
        print p

我不使用f.e.的原因for line in file('filename'):是我不打算处理整个文件;将范围放在for行中可以一目了然地显示限制。