首页 > 解决方案 > 如何阅读第 2 行和第 3 行以及之后的每 5 行:第 2、第 3、第 7、第 8、第 12、第 13 等

问题描述

我正在尝试从 python 中的文本文件中读取某些行。

我的文本文件:

Data Set    
for this Event    
d1: p, t, h = 9, 12, 30    
d2: p, t, h = 12, 22, 11    
Data Set     
for this Event    
d1: p, t, h = 9, 12, 30    
d2: p, t, h = 12, 22, 11

etc. 

如何读取第 2 行和第 3 行,然后读取第 7 行、第 8 行、第 12 行和第 13 行,以便我只读取包含数据的行并跳过具有此事件数据集的行。

这是我尝试过的:

with open("d.txt") as f:

   for line2 in f.read().split("\n")[2::5]:
     print(line2)
   for line3 in f.read().split("\n")[3::5]:
     print(line3)
while line2:
   line = []
   line.append(line2)
   print(line)

但这只会给我第 2、第 7、第 12、第 17 等行。我做错了什么,我没有得到第 2、第 3、第 7、第 8、第 12、第 13 等线?如果我line.append(line3)改为写,则会收到以下错误:

Traceback (most recent call last):
  File "write.py", line 9, in <module>
    line.append(line3)
NameError: name 'line3' is not defined

任何指导将不胜感激!

编辑:查看答案和评论后,我现在尝试将以下内容编写为我的代码:

from itertools import tee, islice
with open("d.txt") as f:
f1 = islice(f, 2, None, 5)
f2 = islice(f ,3, None, 5)

for l1, l2 in f1, f2:
    #print(f "{l1} --- {l2}")
    pass

但是,我现在收到一个错误,我不明白它为什么会出现: Traceback(最近一次调用最后一次):文件“write.py”,第 6 行,in for l1,l2 in f1,f2: ValueError: too许多要解压的值

我现在仍然不知道如何修复此代码。任何进一步的指南将不胜感激!

标签: pythonline

解决方案


f.read()耗尽要从文件中读取的剩余字符的内部缓冲区。这意味着如果你f.read()连续调用两次,第一次调用会起作用,但第二次不会(它会返回一个空字符串,因为文件被第一次调用耗尽)。您必须使用该seek()方法将内部字符光标放回文件的开头。或者,只需先阅读所有行,然后再做其余的。

with open("d.txt") as f:

    lines = f.readlines()

    for line2 in lines[2::5]:
        #...
    for line3 in lines[3::5]:
        #...

另一种选择是使用正则表达式来匹配和保留那些遵循您正在寻找的模式的行。


推荐阅读