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

Я file.readline() некоторый файл реестра, чтобы отфильтровать некоторые подстроки. Я делаю его копию (просто для сохранения оригинала), используя shutdown.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)

Это совершенно так. Возможно, вы захотите добавить его в качестве ответа, поэтому я могу его принять. Большое спасибо - мелочь, но очень приятно :)

Radoslaw Dubiel 02.07.2019 12:02

Готово - сделал комментарий только потому, что я не был Конечно, который мог бы это исправить, - но я надеялся, что это, по крайней мере, поможет вам начать.

Martin Bonner supports Monica 02.07.2019 12:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме