我有这段代码:
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 } }
答案 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+"
),并使用函数来查找正确的替换。这实际上是同时解决方案,也是我推荐的解决方案。不需要循环。