您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

遍历多个文件的所有行的最pythonic方法是什么?

遍历多个文件的所有行的最pythonic方法是什么?

总有fileinput

for line in fileinput.input(filenames):
    ...

但是,阅读源代码似乎fileinput.FileInput不能用作上下文管理器1。为了解决这个问题,可以使用实例,contextlib.closing因为FileInput实例具有合理实现的close方法

from contextlib import closing
with closing(fileinput.input(filenames)) as line_iter:
    for line in line_iter:
        ...

使用上下文管理器的另一种方法是编写一个简单的函数,遍历文件并随行产生以下行:

def fileinput(files):
    for f in files:
        with open(f,'r') as fin:
            for line in fin:
                yield line

itertools.chain这里不需要真正的恕我直言…这里的魔力在于yield语句,该语句用于将普通函数转换为异常懒惰的生成器。

1顺便说一句,从python3.2开始,fileinput.FileInput 实现为上下文管理器,它执行与我们之前所做的完全一样的操作contextlib。现在我们的示例变为:

# Python 3.2+ version
with fileinput.input(filenames) as line_iter:
    for line in line_iter:
        ...

尽管另一个示例也适用于python3.2 +。

python 2022/1/1 18:43:34 有298人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶