如何在不加载整文件时读取importlib.resources.files的指定行
问题解决:读取资源文件指定行的正确方式
错误原因
你代码里的for i, line in graphics:写法有误——文件对象迭代时,每次返回的是完整的一行字符串,没法直接拆分成行号i和行内容line,这就是触发ValueError: too many values to unpack (expected 2)的原因。
修正方案
要同时获取行号和行内容,得用enumerate()函数包装文件对象,它会自动为每行生成对应的索引。另外,找到目标行后立刻break,避免遍历剩余行,能最大程度减少耗时,也不会把整个大文件加载到内存里。
修正后的代码:
from importlib.resources import files target_line = 4 with files('data').joinpath('graphics.txt').open() as graphics: for i, line in enumerate(graphics): if i == target_line: # 注意line末尾带有换行符,可根据需求用strip()去除 print(line.strip()) break # 找到目标行就停止遍历,节省资源
补充说明
- 你的项目结构没问题:
data是合法Python包(包含__init__.py),importlib.resources.files('data')能正确定位到包目录。 - 这种方式只会遍历到目标行就停止,不会读取整个文件,完全符合你“减少耗时、不加载大文件到内存”的需求。
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

