gpt4 book ai didi

python - 如何循环访问同一打开文件的两个生成器

转载 作者:行者123 更新时间:2023-12-01 09:01:14 28 4
gpt4 key购买 nike

我有一个中等大小的文件(25MB,1000000 行),我想读取除每隔三行之外的每一行。

第一个问题:将整个文件加载到内存中然后读取行(方法 .read())或加载并读取一行是否更快?时间(方法.readline())?

由于我不是经验丰富的编码员,因此我尝试了使用 itertools 模块中的 islice 方法的第二个选项。

import intertools

with open(input_file) as inp:
inp_atomtype = itertools.islice(inp, 0, 40, 3)
inp_atomdata = itertools.islice(inp, 1, 40, 3)
for atomtype, atomdata in itertools.zip_longest(inp_atomtype, inp_atomdata):
print(atomtype + atomdata)

虽然循环遍历单个生成器(inp_atomtypeinp_atomdata)会打印正确的数据,但同时循环遍历它们(如本代码所示)会打印错误的数据。

第二个问题:如何使用生成器到达所需的行?

最佳答案

您不需要对迭代器进行切片,一个简单的行计数器就足够了:

with open(input_file) as f:
current_line = 0
for line in f:
current_line += 1
if current_line % 3: # ignore every third line
print(line) # NOTE: print() will add an additional new line by default

至于将其变成生成器,只需yield该行而不是打印。

说到速度,考虑到您无论如何都会读取行,I/O 部分可能会采取相同的方式,但您可能会从快速列表切片而不是计数行中受益一点(在总处理时间中),如果您有足够的工作内存来保存文件内容,并且如果可以接受预先加载整个文件而不是

关于python - 如何循环访问同一打开文件的两个生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52438356/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com