【发布时间】:2019-01-30 01:29:13
【问题描述】:
我正在尝试反向读取文本文件中的每一行。我正在尝试通过生成器来做到这一点。我写了parser_entries(),它接受一个可迭代的东西并返回行,并产生一个可迭代的东西,它一次返回行并产生一个已解析的条目(这必须是一个生成器)。
sample.txt:
2018/03/25-00:08:48.638553 508 7FF4A8F3D704 snononsonfvnosnovoosr
2018/03/25-10:08:48.985053 346K 7FE9D2D51706 ahelooa afoaona woom
2018/03/25-20:08:50.486601 1.5M 7FE9D3D41706 qojfcmqcacaeia
2018/03/25-24:08:50.980519 16K 7FE9BD1AF707 user: number is 93823004
2018/03/26-00:08:50.981908 1389 7FE9BDC2B707 user 7fb31ecfa700
2018/03/26-10:08:51.066967 0 7FE9BDC91700 Exit Status = 0x0
2018/03/26-15:08:51.066968 1 7FE9BDC91700 std:ZMD:
解决方案:
def parser_entries(lines=iter(reversed(list(file)))):
line = lines.split('.', maxsplit=1)
yield (line[0], line[1])
with open('a.txt') as f:
lines = parser_entries(f)
date_part, line = next(lines)
我在尝试我的解决方案时遇到以下错误:
line = lines.split('.', maxsplit=1)
AttributeError: '_io.BufferedReader' object has no attribute 'split'
【问题讨论】:
-
你说你想反向迭代但是你想要的结果是第一行??
-
您确定不希望
.638553出现在data_part中吗?我相信这是秒的分数。 -
当然,但错误是将生成器放置为默认参数值。在这里,我在考虑如何逐行向后读取文件。
-
@Primusa,对不起,这是个错误。更新了!
-
@martineau,是的,我确定我不希望
.638553出现在 date_part 中。