Python在一个环境中拒绝text.replace()
我一直在嘲弄下面一段关于pylons应用程序的肮脏支持代码,它可以在python shell、单独的python文件或在paster中运行时正常工作。现在,我们已经通过mod_wsgi和apache使应用程序联机,这段特定的代码完全停止工作。首先,代码本身:Python在一个环境中拒绝text.replace(),python,apache,replace,pylons,Python,Apache,Replace,Pylons,我一直在嘲弄下面一段关于pylons应用程序的肮脏支持代码,它可以在python shell、单独的python文件或在paster中运行时正常工作。现在,我们已经通过mod_wsgi和apache使应用程序联机,这段特定的代码完全停止工作。首先,代码本身: def fixStyle(self, text): t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,)) t = t.replace('cla
def fixStyle(self, text):
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
t = t.replace('<td>', '<td style="%s">' % (STYLEDEF,))
t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
return t
def fixStyle(self,text):
t=text.replace(“”,“”%(STYLEDEF,))
t=t.replace('class=“wide”,'style=“width:125px;%s”'(STYLEDEF,))
t=t.replace('',%(STYLEDEF,))
t=t.replace(“添加一些打印语句并检查Apache日志:
def fixStyle(self, text):
print "text:", text
print "STYLEDEF", STYLEDEF
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
print "t:", t
def fixStyle(self,text):
打印“文本:”,文本
打印“STYLEDEF”,STYLEDEF
t=text.replace(“”,“”%(STYLEDEF,))
打印“t:”,t
我不知道您的问题是什么,但我发现重复使用replace()
不是一件好事:如果字符串中有四种模式,则将有四次创建新字符串
国际海事组织,这应该更好:
def fixStyle(self, text):
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
t = t.replace('<td>', '<td style="%s">' % STYLEDEF)
t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
return t
import re
STYLEDEF = 'stuff-from-styledef'
LINKSTYLE = 'VVVV'
def aux(m, dic = {'<p':('<p style="',STYLEDEF),
'<td':('<td style="',STYLEDEF),
'class="wide"':('style="width: 125px; ',STYLEDEF),
'<a':('<a style="',LINKSTYLE)} ):
return '%s%s"' % dic[m.group()]
pat = re.compile('<p(?=>)>|class="wide"|<td(?=>)|<a(?= )')
ch = '<table><tr><td>Test!</td></tr></table><a type="brown" >'
print ch
print fixStyle(None, ch)
print pat.sub(aux,ch)
为了去掉条件行,我写了前面的解决方案,我不知道为什么,我停在那里。解决方案的兴趣在于写正则表达式字符串,带有断言,允许写John Machin的解决方案,但我用这些oafish元组污染了它
还有一种解决方案:
def aux(m, STY = STYLEDEF,LIN = LINKSTYLE ):
return ( 'style="width: 125px; ' if m.group(3) else m.group(1)+' style="' ) + \
( LIN if m.group(2) else STY) + '"'
pat = re.compile('(<p(?=>)|<td(?=>)|(<a(?= )))|(class="wide")')
def aux(m,STY=STYLEDEF,LIN=LINKSTYLE):
返回('style=“width:125px;”如果m.group(3)或m.group(1)+'style=“”)+\
(如果m.group(2)else STY)+'“'
pat=re.compile('())|(对不起,但是:没有提到repr()
的调试描述是不可信的。请确保您正在记录repr(text)
和repr(t)
,而不是text
和t
在同一数据段上运行非工作环境和至少一个工作环境,并编辑您的问题,以显示您使用的实际代码和实际日志输出。嗯……您确定apache使用的是正确版本的文件吗?我想知道您是否可以用类似调试(text)的方式显示文本值我怀疑问题不在这里,我将文本和t值添加到日志(log.info([text,t,text==t]))没有任何改变。你是在返回之前写的吗?你的日志中写了什么?是的,我写了,在开始和结束时。两个输出完全相同。我将在一点时间内把它添加到原始问题中。你为什么不在aux
定义时间将doodas连接起来?dic
值变成例如。@John Machin你知道:我的flick你说得很对。看看我的编辑。顺便说一句,是不是doodah,用h?我同意这样一个事实,4个互相替换是令人讨厌的,但它是肮脏的代码。而且,这是我能想到的最简单的代码。我不确定如何使代码更复杂来解决它。尽管如此!我会尝试这样做。因为没有ted在评论中,现在也是在最初的帖子中,我当然添加了日志来测试发生了什么。但是为了简洁起见,我删除了它。
def fixStyle(self, text):
print "text:", text
print "STYLEDEF", STYLEDEF
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
print "t:", t
def fixStyle(self, text):
t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
t = t.replace('<td>', '<td style="%s">' % STYLEDEF)
t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
return t
import re
STYLEDEF = 'stuff-from-styledef'
LINKSTYLE = 'VVVV'
def aux(m, dic = {'<p':('<p style="',STYLEDEF),
'<td':('<td style="',STYLEDEF),
'class="wide"':('style="width: 125px; ',STYLEDEF),
'<a':('<a style="',LINKSTYLE)} ):
return '%s%s"' % dic[m.group()]
pat = re.compile('<p(?=>)>|class="wide"|<td(?=>)|<a(?= )')
ch = '<table><tr><td>Test!</td></tr></table><a type="brown" >'
print ch
print fixStyle(None, ch)
print pat.sub(aux,ch)
<table><tr><td>Test!</td></tr></table><a type="brown" >
<table><tr><td style="stuff-from-styledef">Test!</td></tr></table><a style="VVVV" type="brown" >
<table><tr><td style="stuff-from-styledef">Test!</td></tr></table><a style="VVVV" type="brown" >
def aux(m, dic = {'<p' :'<p style="%s"',
'<td' :'<td style="%s"',
'class="wide"':'style="width: 125px; %s"'} ):
if m.group(1):
return '<a style="%s"' % LINKSTYLE
else:
return dic[m.group()] % STYLEDEF
pat = re.compile('<p(?=>)|class="wide"|<td(?=>)|(<a)(?= )')
def aux(m, STY = STYLEDEF,LIN = LINKSTYLE ):
return ( 'style="width: 125px; ' if m.group(3) else m.group(1)+' style="' ) + \
( LIN if m.group(2) else STY) + '"'
pat = re.compile('(<p(?=>)|<td(?=>)|(<a(?= )))|(class="wide")')
def aux(m, dic = {'<p' :'<p style="%s"' % STYLEDEF,
'<td':'<td style="%s"' % STYLEDEF,
'<a' :'<a style="%s"' % LINKSTYLE,
'class="wide"':'style="%s"' % ('width: 125px; '+STYLEDEF) } ):
return dic[m.group()]
pat = re.compile('<p(?=>)|class="wide"|<td(?=>)|<a(?= )')