编程语言
首页 > 编程语言> > 首选文件逐行读取Python中的习语

首选文件逐行读取Python中的习语

作者:互联网

几乎每次我用Python读取文件时,我都想要的是:

with open("filename") as file_handle:
    for line in file_handle:
        #do something

这真的是首选的成语吗?这种双重缩进所有文件读取逻辑,这有点让我感到恼火.有没有办法将这个逻辑折叠成一行或一层?

解决方法:

对于简单的情况,是的,两级with和for是惯用的.

对于缩进成为问题的情况,这里与Python中的任何其他地方一样,惯用的解决方案是找到一些东西分解成一个函数.

你可以编写包装来帮助它.例如,这是解决您使用的一些问题的简单方法(例如,即使在最好的情况下,文件在完成循环后仍然存在,直到范围结束 – 可能是几天之后,或者永远不会,如果范围是主事件循环或生成器或其他东西……):

def with_iter(iterable):
    with iterable:
        yield from iterable

for line in with_iter(open("filename")):
    # do something

for line in with_iter(open("other_filename")):
    # do something else

当然它并不能解决所有问题. (有关详细信息,请参阅this ActiveState recipe.)

如果你知道它做你想要的,那很好.如果你不理解差异……坚持什么是惯用的;它是惯用的原因.

那么,你如何重构代码呢?最简单的方法通常是将循环体转换为函数,因此您可以使用map或理解:

def do_with_line(line):
    return line

with open("filename") as f:
    process = [do_with_line(line) for line in f]

但如果问题是for上面或下面的代码太深,你将不得不在不同的层次上进行重构.

标签:python,idioms,file-io
来源: https://codeday.me/bug/20190529/1177073.html