Я пытаюсь понять, почему оператор 'in' не может определить подстроку с вводом HTML.У меня есть файл отчета в формате html, и мне нужно найти и извлечь любые строки с информацией об ошибках данных.
По независящим от меня причинам я вынужден использовать Python 2.7.1.
Минимальный код:
import os
import sys
with open(sys.argv[1], "r") as input:
for line in input:
print("{}:{}".format('Data' in str(line),line)
Минимальный тестовый ввод:
<html>
<head> </head>
<body>
<h2>Result summary</h2>
<table>
<tr><td class="header">Last 4500 Errors</td></tr>
<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 41A3A7094, Expected: B6329266, Actual: B6329066</td></tr>
<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 2376908D4, Expected: 813E2880, Actual: 813E2800</td></tr>
</table>
</body>
</html>
Результат:
False:??<html>
False:<head>
False:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
False:</head>
False:<body>
False:<h2>Result summary</h2>
False:<table>
False:<tr><td class="header">Last 4500 Errors</td></tr>
False:<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 41A3A7094, Expected: B6329266, Actual: B6329066</td></tr>
False:<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 2376908D4, Expected: 813E2880, Actual: 813E2800</td></tr>
False:</table>
False:</body>
False:</html>
False:
Эта же строка успешно проанализирована с использованием интерпретатора Python:
$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> line = '<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 41A3A7094, Expected: B6329266, Actual: B6329066</td></tr>'
>>> print("{}:{}".format('Data' in line, line))
True:<tr><td class="value">[Data Error] Test: 5, CPU: 0, Address: 41A3A7094, Expected: B6329266, Actual: B6329066</td></tr>
>>>
Я думал, что это может быть проблема с кодировкой, поэтому я также попытался использовать модуль кодеков и открыть в соответствующей кодировке, но у меня такое же поведение.
Что такое интерпретаторделать что мой сценарий не?