Быстрый алгоритм поиска повторяющихся разделов в текстовом файлеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Быстрый алгоритм поиска повторяющихся разделов в текстовом файле

Сообщение Anonymous »

Проблема: имеется текстовый файл с 6 миллионами строк. Этот текстовый файл содержит блоки, начинающиеся со строки «АААААААА», количество вхождений строки «ААААААА» — 1,6 миллиона. Первый блок начинается со строки 86 текстового файла. нужно написать алгоритм, который бы находил в этом файле одинаковые блоки и записывал их в новый текстовый файл:

блок 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»