python - 如何阅读第 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许多要解压的值
我现在仍然不知道如何修复此代码。任何进一步的指南将不胜感激!
解决方案
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]:
#...
另一种选择是使用正则表达式来匹配和保留那些遵循您正在寻找的模式的行。
推荐阅读
- swift - 移除子视图控制器
- php - 预期响应代码 250 但得到代码“550” Laravel swift mailer
- python - Tensorboard 未显示最后训练模型的自定义指标
- javascript - 如何在服务器端将字符串转换为 json?
- java - 如何在 Android 中将多个客户端套接字连接到一个服务器套接字?
- perl - 如何使用 Perl 解析多个 csv 文件并仅打印唯一的结果
- excel - 在excel中如何确定一个月从哪一行开始,在哪一行结束?
- .net - dotnet core3.1 如何去除依赖,Microsoft.AspNetCore.Analyzers
- macos - 如何使用适当的 .ssh 密钥推送到 .git 存储库?
- react-native - 设置其他变量在 onViewableItemsChanged FlatList(React Native) 中不起作用