Есть ли способ вложения двух входных файлов в Python? - PullRequest
2 голосов
/ 12 октября 2011

Для каждой строки в 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 ]

3 голосов
/ 31 октября 2013

Вот прямой ответ на решение , предложенное @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)
3 голосов
/ 12 октября 2011

Это не работает, так как fileinput.input() создает глобальный экземпляр , поэтому вы не можете вызвать его дважды так, как пытаетесь.

Почему бы просто:

for line in open('fileX'):
    do.fun.stuff(line)
    for element in open('fileY'):
        process(element,line)
2 голосов
/ 12 октября 2011

fileinput.input использует глобальный общий экземпляр fileinput.FileInput.Используйте этот класс напрямую, создав два экземпляра, и он должен работать.

1 голос
/ 12 октября 2011

Используя 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...