Найти - Пользователи
Полная версия: Как к переменной применить r' '
Начало » Python для новичков » Как к переменной применить r' '
1
vmprog
Здравствуйте.
Надо сравнить две строки. Проблема в том, что к 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')
Если str_to_f делаю без r' то вылезает ошибка.
truporez
Ошибка в вашей строке: \x… - это неверная escape последовательность. Потому без raw и не работает. Исправляйте.
vmprog
В чем проблема мне понятно. Что делать то?
Как переменную tx в raw превратить?
Ed
Я подозреваю, что ваш отладчик просто режет длинную строку вот в этом месте> \x… и поэтому показывает вам многоточие. Попробуйте таки узнать что там действительно в строке, потому как -x… не имеет смысла с точки зрения питона, после \x должно быть две hex цифры.

PS: Чего-то я торможу. Попробуйте “%r” % tx
vmprog
Помогите. На втором цикле строки визуально одинаковые, типы 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 &quot;\\xc1\\xf...\xf2\\xe8\\xff&quot; \\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
Fibio
поробуйте без цикла написать if str_to_f in res: print ‘——————–’ str_to_f
Ed
Вот с этим: \xf… и не сработает. Я же объяснял про многоточия.
Fibio
можете написать print res сюда?
bw
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'Конфигурация &quot;Бухгалтерия Предприятия&quot; ред. 2.0 базовая'
str_to_f = simplify_text(str_to_f)

# ...

if str_to_f == simplify_text(unicode(item)):
# ...

#...
..bw
vmprog
Большое всем спасибо.
Помог просмотр print res
Действительно при отладке мне показывались обрезанные строки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB