在文件中打印行而不重置指针

时间:2019-05-16 14:27:53

标签: python python-3.x file printing pycharm

我正在学习Python,现在我想在文件中打印特定的行,在这种情况下,所有行都是偶数行(假设基数为1)。

在互联网上无数的地方,我看到了据说有效的同一简单循环。例如。 this SO threadthis article

他们都使用下面的方法

f = open('output.txt', 'r')
for line in f:
    print(line)

对我来说,除了“退出代码为0的过程已完成”

f.seek(0)之前使用for line...证实了我的怀疑,即指针位于文件的底部。

利用这些信息,我构建了以下

f = open('Output.txt', 'r')
startline = 1
s = (startline-1 | 1) + 1 #determine first even line nr. from specified starting line
count = 0

for a in f: count += 1

for line in range(s-1, count, 2):
    f.seek(0)
    print(f.readlines()[line])  

这可行,但是并不能解释为什么人们 not 将指针重置为顶部似乎如此普遍。

在此之后,这将打印所有必要的行,但中间会留空行。如果我改用print(f.readlines()[line] + 'END'),结果如下,看来空白行现在一定是换行了吗?

  

是的,勇敢的罗宾爵士转过身来
  结束
  然后英勇地退缩了
  结束
  勇敢地说话他的脚
  结束
  他击败了一个非常勇敢的撤退END

以退出代码0结束的过程

编辑: 我当前的整个代码

f = open('Output.txt')
startline = 1
s = (startline-1 | 1) + 1
count = 0

for a in f: count += 1
f.seek(0)
for line in range(s-1, count, 2):
    f.seek(0)
    print(f.readlines()[line], end = '')

for line in f:
    print(line)

有输出

  

是的,勇敢的罗宾爵士转过身来
  然后英勇地退缩了
  勇敢地说话他的脚
  他退缩得非常勇敢
  流程结束,退出代码为0

1 个答案:

答案 0 :(得分:1)

您可以在不干扰文件指针的情况下获得相同的结果:

with open('Output.txt') as f:
    for i, line in enumerate(f):
        if i%2 == 1:
            print(line, end = '')

(由于要从1开始计数,所以要检查奇数行)