Lia*_*iam 1 python asynchronous python-3.x python-trio
所以我想用三重奏(异步)打开文件,然后由于文件很大,读取它的单个特定行
所以在“普通”同步 python 中,我会做这样的事情:
with open("text.txt") as f:
for i, line in enumerate(f):
if i == 3:
print(line)
Run Code Online (Sandbox Code Playgroud)
这将打印文件第二行的内容
现在的问题是,当使用 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)
Run Code Online (Sandbox Code Playgroud)
只会为 i 返回该行的值,而对于该行只返回空格
那么,如何使用三重奏/异步来读取大文件的特定行而不会丢失太多内存?
构建一个异步枚举函数,如下所示:
async def aenumerate(ait, start=0):
i = start
async for item in ait:
yield i, item
i += 1
Run Code Online (Sandbox Code Playgroud)
那么您可以轻松地执行以下操作:
async with await trio.open_file("text.txt") as f:
async for i, line in aenumerate(f):
print(i)
print(line)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |