gpt4 book ai didi

python - 首选文件逐行读取 Python 中的成语

转载 作者:太空狗 更新时间:2023-10-29 23:59:31 26 4
gpt4 key购买 nike

我感觉几乎每次用Python读一个文件,我想要的是:

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

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

最佳答案

对于简单的情况,是的,两级 withfor 是惯用的。

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


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

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 - 首选文件逐行读取 Python 中的成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com