0

Есть два txt файла: в файле 1.txt строку №5 нужно менять поочередно строками из файла 2.txt, где 10 строк с интервалом в 60 секунд. То есть каждую минуту в файле 1.txt содержимое строки №5 должно меняться на содержимое новой строки из 2.txt до окончания там строк.

Подскажите, пожалуйста, как это лучше реализовать?

  • 1
    попробуйте по шагам задачу решать, если на каком-то шаге застрянете, то задайте вопрос именно об этом шаге: №1 читайте 2.txt по строчно (если не знаете как спросите)¶ №2 замените 5-ую строчку в 1.txt на найденную строчку (см. ссылку выше как строки по условию заменять). Чтобы найти 5-ую строчку можно использовать for n, line in enumerate(file, start=1): if n == 5: replace¶ №3 подождите минуту (Как правильно сделать временный цикл?) и повторите с шага №1 (пока есть строчки в 2.txt) – jfs Aug 02 '18 at 04:53

1 Answers1

0

На 2-м, напишите комментарий, если не работает подправим.

import time
with open(r'2.txt', 'r') as f2:
    for line in f2.readlines():
        with open(r'1.txt', 'r') as f1r:
            lines = f1r.readlines()
            lines[4] = line
        with open(r'1.txt', 'w') as f1w:
            f1w.writelines(lines)
        time.sleep(60)
  • С этим разобрался, спасибо, работает вроде корректно. А если усложнить немного задачу и после каждой замены строки еще открывать abc.exe из текущей папки, а потом только пауза 60 секунд и новый цикл с новой строкой? – AndreyJD Aug 03 '18 at 02:45
  • перед time.sleep(60)импортируйте модуль os import os и запустите приложение os.system('C:\Windows\system32\SnippingTool.exe') – Eugene Dennis Aug 03 '18 at 07:01
  • Приложение запускается, но при этом цикл с заменой строки и новым открытием приложения через 60 сек не повторяется снова – AndreyJD Aug 03 '18 at 15:12
  • для цикла, можно не использовать readlines(), который весь файл сразу в память загружает. Вместо этого достаточно только одну строчку в памяти держать: for line in file: (а не for line in file.readlines():). Это не усложняет код, поэтому даже для маленьких входных файлов стоит более идиоматичный вариант использовать без явного вызова readlines() на for строчке¶ Вместо os.system(), которая всегда shell запускает, можно использовать subprocess.check_call(), чтобы запустить только саму команду, без cmd.exe и выбросить исключение, в случае ошибки (ненулевого кода возврата). – jfs Aug 05 '18 at 05:49
  • @AndreyJD если новая проблема возникла (цикл висит или ошибка произошла), то как отдельный StackOverflow вопрос задайте – jfs Aug 05 '18 at 05:53