对于 fileX 中的每一行,我需要扫描 fileY 的所有行。
我试过了:
for line in fileinput.input('fileX'):
do.fun.stuff(line)
for element in fileinput.input('fileY'):
process(element,line)
但我明白了:
RuntimeError:input()已激活
我想我必须指定 fileinput 的第二个实例与第一个实例不同。
答案 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)