有没有办法在python中嵌套两个fileinput?

时间:2011-10-12 10:38:42

标签: python file-io

对于 fileX 中的每一行,我需要扫描 fileY 的所有行。

我试过了:

for line in fileinput.input('fileX'):
    do.fun.stuff(line)
          for element in fileinput.input('fileY'):
              process(element,line)

但我明白了:

RuntimeError:input()已激活

我想我必须指定 fileinput 的第二个实例与第一个实例不同。

4 个答案:

答案 0 :(得分:3)

fileinput.input() creates a global instance起,这不起作用,因此您无法以您尝试的方式调用它两次。

为什么不简单:

for line in open('fileX'):
    do.fun.stuff(line)
    for element in open('fileY'):
        process(element,line)

答案 1 :(得分:3)

以下是@CatPlusPlus建议的solution的明确答案:

import fileinput
fileX = fileinput.FileInput(files='fileX')
fileY = fileinput.FileInput(files='fileY')
for line in fileX:
    do.fun.stuff(line)
          for element in fileY:
              process(element,line)

答案 2 :(得分:2)

fileinput.input使用fileinput.FileInput的全局共享实例。直接使用该类,创建两个实例,它应该可以工作。

答案 3 :(得分:1)

使用fileinput,您可以作为一个单元轻松迭代多个文件,但它似乎没有在这里获得任何东西。分别迭代文件的内容。一个不错的方法是使用itertools.product

import itertools
with open('fileX', 'r') as f1:
    with open('fileY', 'r') as f2:
        for (line, element) in itertools.product(f1, f2):
            process(element, line)