Как безопасно сравнить строку, определенную в переменной, со строкой, загруженной из текстового файла с неизвестной кодировкой в ​​Python 2.7? - PullRequest
0 голосов
/ 23 января 2020

У меня есть файл конфигурации с парой ключ-значение, как показано ниже:

PARAM1=FOO
PARAM2=BAR

Мой Python скрипт загрузки этих значений сравнивает их со строкой. Странно, это сравнение не удается, поэтому я подозреваю, что проблема кодирования / декодирования со значением, загруженным из текстового файла. Как безопасно выполнить это сравнение?

Код

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# test.py

import os
import io

pattern = 'PARAM1'

file_list = io.open('list.txt','r',encoding='utf8')

for line in file_list.readlines():
    if pattern in line:
        value = line.split('=')[1]

file_list.close()

if value == 'FOO':
    print("[DEBUG] Valid")
else:
    print("[DEBUG] Invalid")

print("[DEBUG] Value: %s" %(value))
assert value == 'FOO', "%s is not equal to 'FOO'" %(value)

Выход

[DEBUG] Invalid
[DEBUG] Value: FOO

Traceback (most recent call last):
  File "test.py", line XX, in <module>
    assert value == 'FOO', "%s is not equal to 'FOO'" %(value)
AssertionError: FOO
 is not equal to 'FOO'

1 Ответ

1 голос
/ 23 января 2020

Обратите внимание на разрыв строки в сообщении об ошибке. Вы не удалили новую строку из значения после того, как прочитали строку из файла.

for line in file_list:
    <b>line = line.strip()</b>
    if pattern in line:
        value = line.split('=')[1]

Вам не нужно вызывать readlines; сам файл является итеративным, поэтому вам не нужен предварительно прочитанный список его содержимого.

...