我正在努力用Python创建一个词云计算,而且我还遇到了一个单词替换功能。我试图用一个有序列表中的单词替换html文件中的一组数字(所以我使用字符串)。所以000将被替换为列表中的第一个单词,001替换为第二个单词等等。
以下方法在移动相对简单的字符串时起作用:
def textReplace():
text = '000 this is 001 some 002 text 003 '
word = ['foo', 'bar', 'that', 'these']
for a in word:
for y, w in enumerate(text):
x = "00"+str(y)
text = text.replace(x, a)
print text
我正在通过一个html文件工作(我将文件的一部分放在下面的字符串中)而不是用列表中的连续项替换000,001,002等的每个实例,它将所有数字替换为第一项。为什么这个方法适用于上面的字符串,但不适用于下面的字符串。任何帮助表示赞赏。谢谢!
def htmlReplace():
text = '<p><span class="newStyle0" style="left: 291px; top: 258px">000</span></p> <p><span class="newStyle1" style="left: 85px; top: 200px">001</span></p> <p><span class="newStyle2" style="left: 580px; top: 400px; width: 167px; height: 97px">002</span></p> <p><span class="newStyle3" style="left: 375px; top: 165px">003</span></p>'
word = ['foo', 'bar', 'that', 'these']
for a in word:
for y, w in enumerate(text):
x = "00"+str(y)
text = text.replace(x, a)
print text
答案 0 :(得分:1)
这样的东西写得更好(对于你的非HTML):
>>> text = '000 this is 001 some 002 text 003'
>>> word = ['foo', 'bar', 'that', 'these']
>>> word_list = iter(word)
>>> import re
>>> re.sub(r'\d+', lambda L: next(word_list), text)
'foo this is bar some that text these'
答案 1 :(得分:0)
不幸的是,你的方法对于这类问题是完全错误的,因为它们是Template Engines的良好候选者。
您可以尝试使用可用模板引擎的数量,或者我可以建议Jinja2,这将符合您的目的 以下是Jinja2
的示例>>> text = """
{% for style in styles %}
<p><span class="newStyle{{ style.styleno }}"
{% for orin in style.orin %}
style="{{ orin.orin }}: {{ orin.attrib }}px
{% endfor %}
">{{ style.val }}</span></p>
{% endfor %}
"""
>>> styles = [{'no':1,
"orin":[{"orin":"left", "attrib":291},
{"orin":"top", "attrib":258}],
"val":"000"},
{'no':2,
"orin":[{"orin":"left", "attrib":100},
{"orin":"top", "attrib":222},
{"orin":"height", "attrib":222},
{"orin":"width", "attrib":222}],
"val":"001"}]
>>> template = Template(text)
>>> template.render(styles = styles)
u'\n\n<p><span class="newStyle"\n\nstyle="left: 291px\n\nstyle="top: 258px\n\n">000</span></p>\n\n<p><span class="newStyle"\n\nstyle="left: 100px\n\nstyle="top: 222px\n\nstyle="height: 222px\n\nstyle="width: 222px\n\n">001</span></p>\n'
>>>