所以我想用三重奏(异步)打开文件,然后由于文件很大,请阅读其中的一行

因此,在“普通”同步python中,我会执行以下操作:

with open("text.txt") as f:
    for i, line in enumerate(f):
        if i == 3:
            print(line)


这将打印文件第二行的内容

现在的问题是,当使用trio的open_file方法时,enumerate(f)返回错误:
TypeError: 'AsyncIOWrapper' object is not iterable

并遵循以下文档:

async with await trio.open_file("text.txt") as f:
    async for i, line in f:
        print(i)
        print(line)


只会返回i的行值,而行的空白

因此,如何通过三重奏/异步来读取大文件的特定行而又不损失太多内存?

最佳答案

像这样构建一个异步枚举函数:

async def aenumerate(ait, start=0):
    i = start
    async for item in ait:
        yield i, item
        i += 1


那么您可以轻松地执行以下操作:

async with await trio.open_file("text.txt") as f:
    async for i, line in aenumerate(f):
        print(i)
        print(line)

关于python - 如何使用Trio异步读取文件的特定行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57452548/

10-15 09:03