Я разрабатываю скрипт на python (https://github.com/BrunorpPaixao/lmfm4u), который используется для очистки текста, который вы получаете с Facebook, когда вы просите их отправить вам все сообщения, которые вы когда-либо отправляли / получали.
Он отлично работает для большинства файлов, но когда я пытаюсь отсканировать гигантский текстовый файл, через несколько минут после того, как я смотрю на замороженный экран, я получаю сообщение на своем терминале с надписью «убит», я думаю, что проблема возникаетот BeautifulSoup и его способности загружать огромные файлы.
Я хотел бы знать, есть ли способ улучшить мой код, чтобы сократить время «очистки», или я делаю что-то не так с этим способом?В настоящее время я делаю это.
Итак ... когда мы получаем файлы из Facebook, они выглядят так:
</div><div></div><div></div></div></div><div class="_3-94 _2lem">11/12/2017, 21:48</div></div><div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder"><div class="_3-96 _2pio _2lek _2lel">Francisco Zacarias</div><div class="_3-96 _2let"><div><div></div><div>eles nao deram respwan</div><div></div><div></div></div></div><div class="_3-94 _2lem">11/12/2017, 21:48</div></div><div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder"><div class="_3-96 _2pio _2lek _2lel">Francisco Zacarias</div><div class="_3-96 _2let"><div><div></div><div>deve ter bugado ent</div><div></div><div></div></div></div><div class="_3-94 _2lem">11/12/2017, 21:48</div></div><div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder"><div class="_3-96 _2pio _2lek _2lel">Bruno Paixao</div><div class="_3-96 _2let"><div><div></div><div>e usares nos pilares</div><div></div><div></div></div></div><div class="_3-94 _2lem">11/12/2017, 21:44</div></div><div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder"><div class="_3-96 _2pio _2lek _2lel">Bruno Paixao</div><div class="_3-96 _2let"><div><div></div><div>é so dropares 5</div><div></div><div></div></div></div><div class="_3-94 _2lem">11/12/2017, 21:44</div></div><div class="pam _3-95 _2pi0 _2lej uiBoxWhite noborder"><div class="_3-96 _2pio _2lek _2lel">Bruno Paixao</div><div class="_3-96 _2let"><div><div></div><div>e usas uma em cada pilar</div><div></div><div></div></div></div><div class="_3-94
Это набор HTML-кода в простой строке, которая затемЯ использую BeautifulSoup, чтобы удалить все теги HTML, затем использую регулярное выражение, чтобы разделить сообщения и, наконец, установить их правильно.
regex = re.compile('\\d{2}/\\d{2}/\\d{4},.\\d{2}:\\d{2}')
CleanStartTime = time.time()
cleaned = BeautifulSoup(document, "lxml").get_text()
cleaned = cleaned.split(" ")
if(len(cleaned) < 290):
print("Wrong type of file, please choose a facebook messenger history file.")
quit()
else:
for i in range(290):
cleaned.pop(0)
cleaned = " ".join(cleaned)
cleanedwregex = re.split(regex, cleaned)
listofdates = re.findall(regex, cleaned)
CleanEndTime = time.time()
print("HTML cleaned in " + str("%.2f" % (CleanEndTime - CleanStartTime)) + "seconds")
PrintStartTime = time.time()
gucciString = ""
for i in range(len(cleanedwregex) - 1):
gucciString += listofdates[i] + " | " + cleanedwregex[i] + "\n"
и, наконец, вывод выглядит следующим образом:
11/12/2017, 21:44 | Bruno Paixaotens de matar os orcs
11/12/2017, 21:44 | Bruno Paixaoai
11/12/2017, 21:31 | Francisco Zacariaso que é que tenho de fazer aqui
11/12/2017, 21:31 | Francisco Zacarias
11/12/2017, 21:31 | Francisco Zacariascaro engenheiro do ips peço desculpa estar a incomodar mas nao sei o que fazer agora
Я надеюсь получитьпомогая с большими файлами «BeautifulSouping», я подумал о том, чтобы проверить общее количество символов (некоторые достигли 58 миллионов символов) и сделать это в битах, добавив в окончательный файл, но прежде чем я попробую это, я хотел бы узнать мнение некоторыхиз вас.
Если вы хотите проверить полный код, нажмите на ссылку GitHub вверху, любая помощь действительно приветствуется!