是否有pythonic oneliner迭代文件的行?

use*_*345 4 python file

我阅读文件的时间占90%,最终结果如下:

with open('file.txt') as f:
    for line in f:
        my_function(line)
Run Code Online (Sandbox Code Playgroud)

这似乎是一个非常常见的情况,所以我想到了一个更短的方式,但这样安全吗?我的意思是文件是否正确关闭,或者您是否看到此方法存在任何其他问题?:

for line in open('file.txt'):
    my_function(line)
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢Eric,这似乎是最好的解决方案.希望我不要将此与此讨论,但是当我们想在几个操作中使用line(而不仅仅是my_function的参数)时,您如何看待这种方法:

def line_generator(filename):
    with open(filename) as f:
        for line in f:
            yield line
Run Code Online (Sandbox Code Playgroud)

然后使用:

for line in line_generator('groceries.txt'):
    print line
    grocery_list += [line]
Run Code Online (Sandbox Code Playgroud)

这个函数是否比iterate_over_file有缺点?

Eri*_*nil 5

如果您经常需要这个,您可以随时定义:

def iterate_over_file(filename, func):
    with open(filename) as f:
        for line in f:
            func(line)


def my_function(line):
    print line,
Run Code Online (Sandbox Code Playgroud)

你的pythonic单线现在是:

iterate_over_file('file.txt', my_function)
Run Code Online (Sandbox Code Playgroud)