Как скопировать файл .reg в чистый .txt в Python?

Я 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)

person Radoslaw Dubiel    schedule 02.07.2019    source источник
comment
Это полностью то. Вы можете добавить его в качестве ответа, поэтому я могу принять его. Большое спасибо - мелочь, но очень благодарна :)   -  person Radoslaw Dubiel    schedule 02.07.2019
comment
Готово - оставил комментарий только потому, что не был уверен, что это исправит - но я надеялся, что это, по крайней мере, поможет вам начать.   -  person Martin Bonner supports Monica    schedule 02.07.2019


Ответы (1)


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

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

open(outputfile, 'r+', encoding='utf16')
person Martin Bonner supports Monica    schedule 02.07.2019