Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2015 00:42:12

Mazay_Ka
Зарегистрирован: 2013-04-03
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

with open, сразу несколько файлов и перебрать их в цикле

Привет, вот такой вопрос допустим у меня есть 2 файлы мне надо их сравнить, к примеру в одном ключи для второго , то есть я перебираю все ключи с первого файла и сверяю с каждым значение во втором файле, если совпадает пишу в третий, если представить что эти файлы очень большие и выгружать каждый в память и потом перебирать очень ресурсоемко, как тогда быть пробовал типа так

with open(file1, 'r') as keys_file, open(file2, 'r') as data_file, open(file3, 'w') as result_file:
      for key in key_file:
              for line in data_file:
                      if re.findall(key, line):
                            # пишем дальше в  result_file

получается перебираю второй файл только с первым ключем, тоесть когда обращаюсь к следующему файлу прошлый закрывается, и дальше по циклу не идет проверка с другими ключами, вот не могу понять как это все сделать сразу в одном цикле, выгружать каждый файл в память и потом уже перебирать не красиво и если будет файл весить пару гиг не вариант, знаю тут есть какая-то хитрость или другой подход. Подскажите пожалуйста.
Спасибо за ответ.

Офлайн

#2 Апрель 25, 2015 01:24:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

with open, сразу несколько файлов и перебрать их в цикле

keys_file = open(file1)
data_file = open(file2)
result_file = open(file3, 'w')
 
with keys_file, data_file, result_file:
    for key in key_file:
        data_file.seek(0)
        for line in data_file:
            if re.findall(key, line):
                ...

Если питон третий и файлы могут содержать не ascii, нужно обязательно указать кодировку при открытии каждого файла.



Отредактировано py.user.next (Апрель 25, 2015 01:27:09)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version