Форум сайта python.su
0
Здравствуйте.
Надо сравнить две строки. Проблема в том, что к tx не могу применить параметр r, чтобы экранировались все, что необходимо.
str_to_f = r'\xca\xee\xed\xf4\xe8\xe3\xf3\xf0\xe0\xf6\xe8\xff "\xc1\xf3\xf5\xe3\xe0\x...ff" \xf0\xe5\xe4. 2.0\xef\xf0\xe8\xff\xf2\xe8\xff" \xf0\xe5\xe4. 2.0'
if tx == str_to_f:
str_to_f '\\xca\\xee\\xed\\xf4\\xe8\\xe3\\xf3\\xf0\\xe0\\xf6\\xe8\\xff "\\xc1\\xf3...0\\xe5\\xe4. 2.0\\xef\\xf0\\xe8\\xff\\xf2\\xe8\\xff" \\xf0\\xe5\\xe4. 2.0'
tx '\xca\xee\xed\xf4\xe8\xe3\xf3\xf0\xe0\xf6\xe8\xff "\xc1\xf3\xf5\xe3\xe0\x...e5\xe4. 2.0 \xe1\xe0\xe7\xee\xe2\xe0\xff\xe4. 2.0 \xe1\xe0\xe7\xee\xe2\xe0\xff'
r'%s' %tx
tx.replace('\x','\\x')Офлайн
6
Ошибка в вашей строке: \x… - это неверная escape последовательность. Потому без raw и не работает. Исправляйте.
Офлайн
0
В чем проблема мне понятно. Что делать то?
Как переменную tx в raw превратить?
Офлайн
13
Я подозреваю, что ваш отладчик просто режет длинную строку вот в этом месте> \x… и поэтому показывает вам многоточие. Попробуйте таки узнать что там действительно в строке, потому как -x… не имеет смысла с точки зрения питона, после \x должно быть две hex цифры.
PS: Чего-то я торможу. Попробуйте “%r” % tx
Отредактировано (Окт. 17, 2011 11:28:20)
Офлайн
0
Помогите. На втором цикле строки визуально одинаковые, типы str, а if не срабатывает:(((((
# -*- coding: utf-8 -*-
import urllib2
import html5lib
import lxml.etree as etree
import codecs, sys
import platform
import re
import shelve
fileBan = r"c:\mydb.dat"
d = shelve.open(fileBan)
sock = urllib2.urlopen('http://downloads.1c.ru/release_info/categ_js.jsp?GroupID=88')
data = sock.read()
sock.close()
res = re.findall(r'<span class="prod">(.+?)</span>',data, re.DOTALL|re.MULTILINE)
str_to_f = "'\\xca\\xee\\xed\\xf4\\xe8\\xe3\\xf3\\xf0\\xe0\\xf6\\xe8\\xff "\\xc1\\xf...\xf2\\xe8\\xff" \\xf0\\xe5\\xe4. 2.0 \\xe1\\xe0\\xe7\\xee\\xe2\\xe0\\xff'"
id = 0;
for item in res:
tx = res[id]
tek_item = '%r' % item
if tek_item == str_to_f:
print '-------------------------'+item
#print item
id +=1
d.close() # close it
Офлайн
2
поробуйте без цикла написать if str_to_f in res: print ‘——————–’ str_to_f
Офлайн
13
Вот с этим: \xf… и не сработает. Я же объяснял про многоточия.
Офлайн
2
можете написать print res сюда?
Офлайн
20
1. str_to_f.decode('string_escape')
2a. tx.encode('string_escape')
2b. repr(tx)
> строки визуально одинаковые
:-)
import string
# ...
def simplify_text(text):
for c in unicode(string.whitespace + string.punctuation) + u'\xa0\xbb':
text = text.replace(c, u'')
return text.lower()
str_to_f = u'Конфигурация "Бухгалтерия Предприятия" ред. 2.0 базовая'
str_to_f = simplify_text(str_to_f)
# ...
if str_to_f == simplify_text(unicode(item)):
# ...
#...
Отредактировано (Окт. 21, 2011 14:39:08)
Офлайн
0
Большое всем спасибо.
Помог просмотр print res
Действительно при отладке мне показывались обрезанные строки.
Отредактировано (Окт. 25, 2011 19:49:47)
Офлайн