0

我写了这段代码

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()在控制台上工作,但为什么它不能在循环内工作?

4

5 回答 5

2

为什么第一个要在控制台上打印任何东西?你不打电话print到任何地方。第二个调用print,所以很明显它会打印出来。

于 2013-10-03T08:11:57.527 回答
0

您所说的控制台可能是交互式解释器。在交互式解释器中,自动显示表达式的结果,使其像计算器一样使用;它执行一个读取-评估-打印循环。当运行一个准备好的程序时,没有打印步骤的假设(从技术上讲,也没有读取步骤),所以如果这是你想要的,你必须请求它。

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

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

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

于 2013-10-03T08:21:16.807 回答
0

f.readlines() 在控制台上工作

在 Python 解释器中,所有值都被隐式打印出来。这意味着,当您键入名称时,它的字符串表示会自动打印:

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

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

a = 'hello'
print(a)
于 2013-10-03T08:18:00.490 回答
0

在您的第一段代码中,您没有print声明。将其修复为:

for i in range(40):
    f=open('file.txt','r')
    if i%2==1:
        print(f.readlines()[i])
于 2013-10-03T08:12:00.510 回答
0

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

from itertools import islice

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

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

于 2013-10-03T08:13:32.237 回答