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

Python 在文件中打印行而不重置指针,python,python-3.x,file,printing,pycharm,Python,Python 3.x,File,Printing,Pycharm,我正在学习Python,现在我想打印文件中的特定行,在本例中是所有偶数行(假设基数为1) 在互联网上数不清的地方,我看到了同样的简单循环,据称它是有效的。例如,或 他们都使用下面的方法 f = open('output.txt', 'r') for line in f: print(line) 对我来说,这根本不返回任何内容,除了“进程已完成,退出代码为0” 在之前使用f.seek(0)作为行…证实了我对指针位于文件底部的怀疑 有了这些信息,我构建了以下 f = open('Outpu

我正在学习Python,现在我想打印文件中的特定行,在本例中是所有偶数行(假设基数为1)

在互联网上数不清的地方,我看到了同样的简单循环,据称它是有效的。例如,或

他们都使用下面的方法

f = open('output.txt', 'r')
for line in f:
    print(line)
对我来说,这根本不返回任何内容,除了“进程已完成,退出代码为0”

之前使用
f.seek(0)
作为行…
证实了我对指针位于文件底部的怀疑

有了这些信息,我构建了以下

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])  
这是可行的,但它并不能解释为什么人们不将指针重置到顶部是如此普遍

接下来,这将打印所有必要的行,但中间有一个空行。如果我使用<代码>打印(F读写())[行] +“结束”<代码>,结果如下,看起来空白行现在必须是一个新的行(

)。 是的,勇敢的罗宾爵士转过身来
结束
他勇敢地退缩了
结束
勇敢地用脚说话
结束
他打了一个非常勇敢的结局

进程已完成,退出代码为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


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

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

(检查奇数行,因为您希望从1开始计数)

您看到的空行是因为,当您读取文件时,它读取文件中的所有内容。包括每行末尾的换行符(
\n
)。由于默认情况下,
print()
语句会在其内容后添加一个换行符,因此最终会出现两个换行符,而不仅仅是您想要的一个。有两种方法可以解决此问题:要么执行
line.strip()
以消除任一侧的空白(包括换行符),要么将参数
end=''
添加到
print()
调用以停止
print()
无论打印什么,都要换行,我仍然对简单for循环为什么不适合你感到困惑。你确定要在
r
模式下打开文件吗?@GreenCoveGuy这很有道理。谢谢文件名是否正确?在中有
output.txt
output.txt
places@rdas对我再次查看我的代码,在我在线查找的简单循环实际将指针设置在文件底部之前,f:count+=1中的a的
。你可以回答这个问题,我会接受的。干杯,这更优雅。为什么我要选择
with
而不是
f=open(…
)?它们都可以
with
在控件离开
with
块时自动关闭文件描述符。否则,您必须手动调用
f.close
,否则可能会泄漏文件描述符资源。