为什么我的代码打印这么大的数字?

时间:2014-04-01 00:28:11

标签: python python-2.7 python-3.x dictionary

我有这段代码:

count = -1
with open("group.txt", "r") as f:
    content = f.read()
with open("group2.txt", "r") as f:
    mydict = eval(f.read())
print(content)
for x in range(0, len(mydict)):
    count += 1
    content = content.replace(str(mydict.keys()[count]), str(mydict.values()[count]))
with open("group3.txt", "w") as f:
    f.write(content)

它应该用mydict.keys()替换所有mydict.values()

当我跑的时候;它会打印很长的数字。

以下是原始行:

<VertexRef> { 0 1 2 <Ref> { vpool } }

它打印为:

<VertexRef> { 81131131213851461468215053091131131401466142513121386133513091131131421505309113113140146614251312138613351296 81131131213851461468215053091131131401466142513121386133513091131131401466142771 811311312138514614682150530911311314014661425131213861335130911311394 <Ref> { vpool } }

应该是:

 <VertexRef> { 754 755 756 <Ref> { vpool } }

group.txt

group2.txt

1 个答案:

答案 0 :(得分:4)

您必须同时更换它们。你正在做的是逐个替换数字。

让我们说这些是您的替代品:

1: 423
2: 32
3: 14
4: 31

,您的内容为"1"。在每个循环之后,你得到这个:

0: 1
1: 432
2: 4332
3: 414142
4: 311311312

不幸的是,AFAIK Python没有一个很酷的替换函数,它接受了搜索和替换的数组,所以你可以做其他几件事:

a)确保无法识别未替换的号码。例如,首先使用正则表达式围绕所有带方括号的数字(或者您知道内容尚未拥有的任何其他内容);然后查找[1]并替换为432,查找[2]并替换为32等;通过这种方式,您明确地标记了您的所作所为以及您仍需要做什么

b)使用一个正则表达式来获取所有数字("\d+"),并使用函数来查找正确的替换。这实际上是同时解决方案,也是我推荐的解决方案。不需要循环。