Ответ 1
Проблема заключается в том, что с python 2.7.10 модуль fileinput не поддерживает использование в качестве менеджера контекста, т.е. оператора with
, поэтому вам придется самостоятельно обрабатывать последовательность. Должно работать следующее:
f = fileinput.input(files=('cutflow_TTJets_1l.txt ', 'cutflow_TTJets_1l.txt '))
for line in f:
proc(line)
f.close()
Обратите внимание, что в последних версиях python 3 вы можете использовать этот модуль в качестве менеджера контекста.
Для второй части вопроса, считая, что каждый файл аналогично отформатирован с равным количеством строк данных формы xxxxxx & xxxxx
, можно сделать таблицу данных из второго столбца каждого из данных следующим образом:
Начните с пустого списка, который будет таблицей, где строки будут списками записей второго столбца из каждого файла:
table = []
Теперь итерации по всем строкам последовательности fileinput
, используя fileinput.isfirstline()
, чтобы проверить, находимся ли мы в новом файле и создаем новую строку:
for line in f:
if fileinput.isfirstline():
row = []
table.append(row)
parts = line.split('&')
if len(parts) > 1:
row.append(parts[1].strip())
f.close()
Теперь table
будет транспонировать то, что вы действительно хотите, каждая строка содержит записи второго столбца данной строки каждого файла. Чтобы транспонировать список, можно использовать zip
, а затем перебрать по строкам транспонированную таблицу, используя метод строки join
для печати каждой строки с помощью разделителя запятой (или любого другого разделителя):
for row in zip(*table):
print(', '.join(row))