Работа с несколькими входными и выходными файлами в Python - PullRequest
0 голосов
/ 17 марта 2010

Мне нужно открыть несколько файлов (2 входных и 2 выходных файла), выполнить сложные манипуляции со строками из входных файлов, а затем добавить результаты в конец 2 выходных файлов. В настоящее время я использую следующий подход:

in_1 = open(input_1)
in_2 = open(input_2)
out_1 = open(output_1, "w")
out_2 = open(output_2, "w")

# Read one line from each 'in_' file
# Do many operations on the DNA sequences included in the input files
# Append one line to each 'out_' file

in_1.close()
in_2.close()
out_1.close()
out_2.close()

Файлы огромны (каждый потенциально приближается к 1Go, поэтому я читаю эти входные файлы по одному. Я предполагаю, что это не очень Pythonic способ сделать что-то. :) При использовании следующей формы хорошо?

with open("file1") as f1:
    with open("file2") as f2:
        with open("file3") as f3:
            with open("file4") as f4:
                    # Read one line from each 'in_' file
                    # Do many operations on the DNA sequences...
                    # Append one line to each 'out_' file

Если да, могу ли я сделать это, избегая кода с высоким отступом (закомментированная часть, которая сама может содержать строки с отступом. Если, как и предполагалось, я заранее использую соответствующие функции)? Спасибо за понимание!

1 Ответ

5 голосов
/ 17 марта 2010

contextlib.nested() позволяет объединить несколько контекстных менеджеров в один оператор:

with contextlib.nested(open(...), open(...), ...) as (in_1, in_2, ...):
  ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...