Резервное копирование в Facebook Messenger - глючные файлы, проблемы с charmap - PullRequest
0 голосов
/ 01 октября 2018

Я сделал резервную копию Facebook Messenger.Он сохраняется по умолчанию, как HTML-файл.Каждый файл для каждого человека, с которым я говорил.Самый большой файл у меня более 80 МБ.Когда я открываю его, я вижу, что в коде тысячи опечаток.Код показывает Á или Å вместо A, æ вместо ae и т. Д. И т. Д.

В таком состоянии я не могу открыть его и прочитать любую программу, поскольку она заканчивается ошибками charmap.

Traceback (most recent call last):
  File "C:/Users/Filip/.PyCharmCE2018.2/config/scratches/test.py", line 35, in <module>
    messages = open("message.html","r").read()
  File "C:\Users\Filip\AppData\Local\Programs\Python\Python36\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1917064: character maps to <undefined>

Это проблема с моим редактором файлов, проблема с загрузкой (загрузка 5 ГБ заняла 8 часов - спасибо, Facebook) или просто такие большие текстовые файлы, сохраненные в одной строке, не имеют возможности работать правильно?

Я пытался открыть файл в:

-Notepad

-EmEditor - по иронии судьбы, время работы с файлом было даже хуже, чем в Notepad

EDIT 1:

Хорошо, мне удалось разбить весь код htlm на простой чистый текст, например:

=A=
jakiefry
15November201511:34
=F=
mediumfry
15November201511:34
=A=
xD
15November201511:34
=A=
mozemediumjestemjakies
15November201511:34
=F=
xDD
15November201511:34
=A=
iostatniotyledejavumam
15November201511:34
...(900 000 lines more)

И читать его построчно, пока не будет найдена проблемная строка.Я использовал этот код:

f = open('messege.txt')
try:
    line = f.readline()
    while line:
        print(line)
        line = f.readline()
    f.close()
except Exception:
    stop = input("stop before it crash")
    print("and when I press enter it crash")

Теперь я ищу способ удалить проблемную строку или просто пропустить ее.Может быть, во время чтения я должен создать новый файл, где будут сохранены только все хорошие строки?Но все же, как пропустить строку, которая делает ошибку, поэтому она рада продолжить.Оставайтесь с нами, ребята, новые обновления идут;)

1 Ответ

0 голосов
/ 03 октября 2018

Хорошо, поэтому решение было таким:

  1. Разделить код на строки.

Чтобы избежать работы с HTML-кодом, я открыл его в браузере и скопировал / вставил чатистория в блокнот ++.Затем сохраняется как текстовый файл.

Чистый код построчно.

Для этого я написал скрипт, который построчно считывал код и в случае ошибки просто пропускал его.Каждая строка, которая не дает ошибок, сохраняется в новом файле.

file_old = open('fobarfoo.txt')
file_new = open('foobarfoo_new.txt', 'w+')
error_counter = 0 

line = file_old.readline()
while line:
    try:
        while line:
            file_new.write(line)
            line = file_old.readline()
        file_old.close()
    except Exception:
        error_counter += 1
        #stop = input("stop before it crash")
print(error_counter)

Таким образом, вывод представляет собой новый файл только с символами или строками кода, которые не генерируют ошибок charmap.

...