Ваша проблема здесь не «надежный способ" для сравнения строк Надежный способ сравнения strigns в Python является оператор равенства ==
-. Ваша проблема заключается в том, что ваши данные были covnerted в Unicode где-то без вас время Зная, что.
Вы и все, кто пишет код, должны знать, что текст не ASCII, а не в мире пост 1990. Даже если все ваше приложение ограничено только английским языком и никогда не должно запускаться в среда интернационала, вы должны найти некоторые символы, отличные от ASCII, в именах людей или в словах типа «resumé».
H прежде чем консольная Python пример, когда проблема может произойти:
>>> "maçã" == u"maçã"
__main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False
модуль CSV в Python не делают никакого authomatic преобразования, и работает с байтовыми strigns (то есть - strigns aready преобразуется в какую кодировку) - это означает, что этот результат вы извлекаете из БД в Юникоде. Вероятно, ваше соединение используется по умолчанию.
Чтобы решить эту проблему, если данные в вашей базе данных правильно отформатированы (и вы еще не потеряли информацию о символах во время вставки), необходимо декодировать строку, считанную из файла CSV, с использованием явного кодирования - так, чтобы оба в юникод (внутреннее кодирование агностик Пайтона) формат строки -
>>> "maçã".decode("utf-8") == u"maçã"
True
Таким образом, вы использовать «Decode» метод на строке чтения формируют файл CSV, чтобы иметь преобразование proepr, перед сравнением. Если вы работаете в Windows, используйте «cp1251» для декодирования. В любом другом приложении (приложение) O.S. это должно быть «utf-8».
Я бы посоветовал чтение этой части - весьма полезно: http://www.joelonsoftware.com/articles/Unicode.html
Можете ли вы привести пример, когда появляется это предупреждение? Мое первое предложение состоит в том, что вы должны быть уверены, что оба аргумента одинаково закодированы. Поэтому вам нужно знать, как кодируются входные данные, чтобы правильно преобразовать их в Юникод. –
Вы оставляете некоторые важные подсказки. Какой модуль вы используете для чтения базы данных Oracle - что означает «meta.Session.query»? Как ваш код цикла установлен I и currEmp? Каков тип поля БД, задающего currEmp [0]? –
Проверьте этот ответ о том, как понимать unicode в Python: http://stackoverflow.com/a/1818326/244672 Надеюсь, это поможет. –