Как мне скопировать файл .reg в чистый .txt на Python? - PullRequest
0 голосов
/ 02 июля 2019

Я file.readline () некоторый файл реестра, чтобы отфильтровать некоторые подстроки.Я делаю копию этого (просто чтобы сохранить оригинал), используя shutil.copyfile (), обрабатывая с помощью foo () и ничего не отфильтровывая.Пробная отладка и содержимое строк очень двоичные:

'˙ţW \ x00i \ x00n \ x00d \ x00o \ x00w \ x00s \ x00 \ x00R \ x00e \ x00g \ x00i \ x00s \ x00t \ x00r \ x00y\ x00 \ x00E \ x00d \ x00i \ x00t \ x00o \ x00r \ x00 \ x00V \ x00e \ x00r \ x00s \ x00i \ x00o \ x00n \ x00 \ x005 \ x00. \ x000 \ x000 \ x00 \ n '

, что довольно очевидно, но не знал об этом (Notepad ++ аккуратное представление текста).Мой вопрос: как я могу отфильтровать мои строки?Я вижу два варианта: reg-> txt-> reg (то, что я имел в виду под заголовком) или преобразование строк в байты, а затем сравнение их с содержимым.

Когда я создаю файлы вручную (копирую и вставляю содержимое входного файла) и даю им .txt, тогда все работает нормально, но хотелось бы, чтобы это можно было автоматизировать.

inputfile = "filename_in.reg"
outputfile = "filename_out.reg"
copyfile(inputfile, output file)

with open(outputfile, 'r+') as fd:
    contents = fd.readlines()
    for d in data:
        foo(fd, d, contents)

1 Ответ

0 голосов
/ 02 июля 2019

Reg-файлы обычно имеют формат UTF-16 (обычно называемый в документации MS «Unicode». Похоже, что ваша отладка обрабатывает данные как 8-битные символы (так что существует множество \x00 для старших байтов)16-разрядных символов). Notepad ++ можно убедить отобразить UTF-16.

Исправление заключается в том, чтобы сообщить Python, что текст, который вы читаете, имеет формат UTF-16:

open(outputfile, 'r+', encoding='utf16')
...