有没有办法在python中嵌套两个fileinput?
对于fileX中的每一行,我需要扫描fileY的所有行 我试过这个:有没有办法在python中嵌套两个fileinput?,python,file-io,Python,File Io,对于fileX中的每一行,我需要扫描fileY的所有行 我试过这个: for line in fileinput.input('fileX'): do.fun.stuff(line) for element in fileinput.input('fileY'): process(element,line) 但我得到: 运行时错误:输入()已处于活动状态 我想我必须指定fileinput的第二个实例与第一个实例不同。fileinput.i
for line in fileinput.input('fileX'):
do.fun.stuff(line)
for element in fileinput.input('fileY'):
process(element,line)
但我得到:
运行时错误:输入()已处于活动状态
我想我必须指定fileinput的第二个实例与第一个实例不同。
fileinput.input
使用了fileinput.fileinput的全局共享实例。直接使用该类,创建两个实例,它应该可以工作。这不起作用,因为fileinput.input()
,所以您不能以尝试的方式调用它两次
为什么不简单地:
for line in open('fileX'):
do.fun.stuff(line)
for element in open('fileY'):
process(element,line)
使用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)
以下是@CatPlusPlus建议的明确答案:
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)
我对python不是很精通,出于某种原因,我的理解是fileinput对于大型文件来说比使用open()更有效。谢谢@aix@pedrosaurio:fileinput
是为一个非常特定的用例而设计的,从我所看到的来看,这个用例在这里并不适用。我不希望它比使用open
更快。