1

次のジェネレーターの何が問題になっていますか?

for file in file_list:
    fh = open(file, 'r')
    while True :
        yield fh.readline()
    fh.close()
4

2 に答える 2

8

問題は、無限ループから抜け出せないことです。これは、単一のファイルからのみ行が永久に生成されるためです。

この種の問題については、fileinputを調べてください。次のようにすれば十分です。

import fileinput
for line in fileinput.input(your_list_of_filenames):
    process(line)

processもちろん、目的に応じて関数を定義する必要があります。

于 2013-09-16T08:59:15.907 に答える
3

次のようなことを試してください:

#!/usr/bin/env python

def get_all_lines(file_list):
    for f in file_list:
        with open(f) as fd:
            for line in fd:
                yield line.strip()

for line in get_all_lines(["a", "b"]):
    print line

どこ

$ cat a
a1
a2

$ cat b
b1
b2

出力:

$ ./g.py 
a1
a2
b1
b2
于 2013-09-16T08:59:15.377 に答える