Вернуть следующие 4 строки после того, как совпадение найдено - PullRequest
1 голос
/ 27 марта 2020

Надеюсь, вы, ребята, можете помочь. В настоящее время я изучаю python и ошеломлен этой задачей, которую я поставил перед собой.

У меня есть файл1 с примерно 1000 строками текста, подобным этому:

1 6  
4 6  
1 4  
2 4  
1 5  
4 6  
3 6  
1 3  
2 4  
..etc etc

У меня есть другой файл2 с 4 (или более) строками текста, подобным этому:

4 6  
1 4  
2 4  
1 5  

Я пытаюсь найти точное совпадение в файле1 с 4 строками текста в файле2, а затем вернуть следующие 4 строки, следующие за совпадением в файле1. Таким образом, в приведенном выше примере возвращаемое значение будет выглядеть следующим образом:

4 6  
3 6  
1 3  
2 4  

Проблема, с которой я столкнулся при попытке найти 4 строки в файле file1. Один файл легко. Я думаю, что это будет сделано с помощью петель, но чем больше я пытаюсь сделать облачность, тем становится моя голова!

Самый близкий я пришел, это код:

textfile = ('results.txt', 'wt')
file1 = open("small_sample.txt", "r")
file2 = open("demo.txt", "r")
file3 = open("results.txt", "a")
list1 = file1.readlines()
list2 = file2.readlines()
file3.write("The following entries appear in both lists: \n")
for i in list1:
    for j in list2:
        if i==j:
            file3.write(i)

1 Ответ

1 голос
/ 27 марта 2020

вы можете использовать:

with  open('file1.txt', 'r') as fp:
    t1 = '\n'.join(l.strip() for l in fp.readlines()) # eliminate extra spaces

with  open('file2.txt', 'r') as fp:
    t2 = '\n'.join(l.strip() for l in fp.readlines())


one_row_length = len(t1.split('\n', 1)[0]) + 1 # 1 represents \n new line character
how_many_rows_after = 4 * one_row_length
end_first_match = t1.index(t2) + len(t2) + 1
print(t1[end_first_match : end_first_match + how_many_rows_after])

вывод:

4 6
3 6
1 3
2 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...