Helpers - компьютеры, интернет, программирование

Как перебирать строки в двух файлах одновременно?

У меня есть два файла, и я хочу выполнить некоторую линейную операцию над ними обоими. (Другими словами, первые строки каждого файла соответствуют друг другу, как и вторые, и т. д.) Теперь я могу придумать несколько несколько громоздких способов одновременного прохода по обоим файлам; однако это Python, поэтому я предполагаю, что здесь есть какое-то синтаксическое сокращение.

Другими словами, есть ли какой-нибудь простой способ адаптировать

for line in file:

чтобы он тянул данные из обоих файлов одновременно?

23.07.2010

Ответы:


1

Питон 2:

Используйте itertools.izip для соединения двух итераторов.

from itertools import izip
for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)):

Если файлы имеют разную длину, используйте izip_longest.

В Python 3 вместо этого используйте zip и zip_longest. Кроме того, используйте with для открытия файлов, чтобы закрытие выполнялось автоматически даже в случае ошибок.

with open(file1name) as file1, open(file2name) as file2:
    for line1, line2 in zip(file1, file2):
        #do stuff
23.07.2010
  • + за использование izip вместо zip 24.07.2010
  • В Python 3 вам нужно использовать zip. 17.11.2016
  • В Python 3 используйте itertools.zip_longest, если вы хотите использовать строки до конца самого длинного файла. 30.08.2017

  • 2

    Вы могли бы попробовать

    for line1, line2 in zip(file1, file2):
        #do stuff
    

    Будьте осторожны, этот цикл завершится, когда закончится более короткий файл.

    При использовании Python 2 itertools.izip лучше подходит для таких вещей, потому что он не создает list.

    23.07.2010
  • zip подходит, если вы используете Python 3 (которого, вероятно, не существовало, когда вы ответили). Редактирование. 01.05.2017

  • 3

    Полный пример для потомков:

    from itertools import izip, izip_longest
    
    file1name = '/some/path/and/file'
    file2name = '/another/path/and/another/file'
    
    with open(file1name) as file1, open(file2name) as file2:
        for line1, line2 in izip(file1, file2):   # or izip_longest
            # do something with the lines
    

    Использование with гарантирует очистку файлов после использования, даже если возникает исключение.

    24.03.2016
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..