блок 1:
АААААА
.... (то, что идет после ААААААА и перед следующим ААААААА)
Номера строк из текстового файла, где это тоже находится: ...
блок 2:
АААААА
.... (то, что идет после ААААААА и перед следующим ААААААА)
Номера строк из текстового файла, где это тоже встречается: ...
И так on\
Я попробовал сделать так, чтобы сначала вводил в массив номера строк вхождений "AAAAAA". Потом я перечитывал эти блоки из файла и смотрел, есть ли они в словаре, если нет, то добавлял их в словарь, и если они были, то записывал номер строки из текстового файла. Но он работает очень медленно и выдал мне ошибку памяти. Я проверил свой алгоритм на 10 блоках, он работает корректно.\
Код: Выделить всё
from itertools import islice
mas_inst = []
block_nach = []
count = 0
dict = {}
file = open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag")
with open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag") as file:
for line in islice(file, 85, None):
if line.strip() == 'AAAAAA':
count = count + 1
mas_inst.append(count)
else:
count = count + 1
# print(line.strip())
print(len(mas_inst))
# print(mas_inst)
for i in range(0, len(mas_inst)-1):
with open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag") as file:
for line in islice(file, 84 + mas_inst[i], mas_inst[i+1] + 84):
block_nach.append(line)
block_nach = tuple(block_nach)
if block_nach not in dict:
dict[block_nach] = [84+mas_inst[i]]
else:
dict[block_nach] = dict[block_nach] + [84+mas_inst[i]]
# break
block_nach = list(block_nach)
block_nach.clear()
print('123')
with open("C:/Users/Azerty/Downloads/MyHypervisorDriver.vmp/Result.txt", 'w') as file_result:
for item in dict:
file_result.writelines(item)
file_result.write('Строчки в которых встречается блок')
file_result.write(str(dict[item]))
file_result.write('\n')
Подробнее здесь: https://stackoverflow.com/questions/793 ... -text-file