Как сравнить строки в кодировке Юникод с ссылкой на сущность в строку, отличную от Юникод - PullRequest
0 голосов
/ 22 августа 2010

Я оцениваю сотни тысяч HTML-файлов. Я ищу отдельные части файлов. Способы создания файлов могут быть небольшими

Например, в одном файле у меня может быть заголовок раздела (после того, как я преобразовал его в верхний и разделил, а затем соединил текст, чтобы избавиться от возможных противоречивых пробелов:

u'KEY1A\x97RISKFACTORS'

В другом файле я мог бы иметь:

'KEY1ARISKFACTORS'

Я пытаюсь создать словарь возможных ответов, и я хочу сравнить эти два и сделать вывод, что они равны. Но каждая замена, которую я пытаюсь выполнить первой строкой для удаления '\ 97, кажется, не работает

Существует довольно много вариантов ключей с различными представлениями сущностей, поэтому я действительно хотел бы создать словарь более или менее автоматически, поэтому у меня есть что-то вроде:

key_dict={'u'KEY1A\x97RISKFACTORS':''KEY1ARISKFACTORS',''KEY1ARISKFACTORS':'KEY1ARISKFACTORS',. . .}

Я предполагаю, что с тех пор, как я бегу

S1='A'
S2=u'A'
S1==S2

Я получаю

True

Я должен иметь возможность сравнить их после обработки html-сущностей

Что я специально пытался сделать, это

new_string=u'KEY1A\x97RISKFACTORS'.replace('|','')

Я получил ошибку

Извините, я был в этом с прошлой ночи. SLott указал на что-то, и я вижу, что использовал неправильный ярлык. Надеюсь, это имеет больше смысла

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Вы правы, что если S1 = 'A' и S2 = u'A ', то S1 == S2.Вместо того, чтобы предполагать это, вы можете сделать простой тест:

key_dict= {u'A':'Value1',
        'A':'Value2'}

print key_dict
print u'A' == 'A'

Это выводит:

{u'A': 'Value2'}
True

Это решено, давайте посмотрим на:

new_string=u'KEY1A\x97DEMOGRAPHICRESPONSES'.replace('|','')

Здесь есть проблема, \ x97 - это значение, которое вы пытаетесь заменить в целевой строке.Тем не менее, ваша строка поиска - «|», то есть шестнадцатеричное значение 0x7C (ascii и unicode) и явно не то значение, которое вам нужно заменить.Даже если цель и строка поиска были ascii или unicode, вы все равно не нашли бы \ x97.Вторая проблема заключается в том, что вы пытаетесь найти не-Unicode строку в Unicode-строке.Самое простое и наиболее разумное решение - просто найти u '\ x97':

print u'KEY1A\x97DEMOGRAPHICRESPONSES'
print u'KEY1A\x97DEMOGRAPHICRESPONSES'.replace(u'\x97', u'')

Выходы:

KEY1A\x97DEMOGRAPHICRESPONSES
KEY1ADEMOGRAPHICRESPONSES
1 голос
/ 22 августа 2010

Почему не очевидное .replace(u'\x97','')? Откуда пришла идея этого '|'?

>>> s = u'KEY1A\x97DEMOGRAPHICRESPONSES'
>>> s.replace(u'\x97', '')
u'KEY1ADEMOGRAPHICRESPONSES'
...