Настройка
Я пишу скрипт для обработки и аннотирования журналов сборки из Visual Studio. Журналы сборки - это HTML, и, насколько я могу судить, Unicode (UTF-16?). Вот фрагмент из одного из файлов:
c: \ anonyfolder \ anonyfile.c (17169): предупреждение C4701: потенциально неинициализированная локальная переменная 'object_adrs2' используется
c: \ anonyfolder \ anonyfile.c (17409): предупреждение C4701: потенциально неинициализированная локальная переменная 'pclcrd_ptr' используется
c: \ anonyfolder \ anonyfile.c (17440): предупреждение C4701: потенциально неинициализированная локальная переменная 'object_adrs2' используется
Первые 16 байтов файла выглядят так:
feff 003c 0068 0074 006d 006c 003e 000d
Остальная часть файла также усеяна нулевыми байтами.
Я бы хотел иметь возможность выполнять поиск / совпадение строк и регулярных выражений в этих файлах. Однако, когда я пытаюсь использовать следующий код, я получаю сообщение об ошибке.
buildLog = open(sys.argv[1]).readlines()
for line in buildLog:
match = u'warning'
if line.find(match) >= 0:
print line
Сообщение об ошибке:
Traceback (последний последний вызов):
Файл "proclogs.py", строка 60, в
if line.find (match)> = 0:
UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xff в позиции 0: порядковый номер не в диапазоне (128)
Очевидно, он задыхается от 0xff
байта в 0xfeff
в начале файла. Если я пропущу первую строку, я не получу совпадений:
buildLog = open(sys.argv[1]).readlines()
for line in buildLog[1:]: # Skip the first line.
match = u'warning'
if line.find(match) >= 0:
print line
Аналогично, использование не-Unicode match = 'warning'
не дает результатов.
Вопрос
Как я могу переносить поиск файла Unicode, используя строки и регулярные выражения в Python? Кроме того, как я могу сделать так, чтобы я мог восстановить исходный файл? (Цель состоит в том, чтобы иметь возможность писать аннотации в строках предупреждения без искажения файла.)