2014-04-01 123 views
0

我有這樣的代碼:爲什麼我的代碼打印這麼大的數字?

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

+2

'mydict = eval(f.read())'每當你發現自己使用eval時,你就知道必須有更好的方法。在你的情況下,它是[pickle](https://docs.python.org/2/library/pickle.html),如果你必須將它寫入文件。 –

回答

4

您必須同時替換它們。你在做什麼是一個一個地替換數字。

比方說,這些都是你的替換:

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

和內容是"1"。每個循環之後,你會得到這樣的:

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

不幸的是,據我所知Python沒有一個很酷的替代函數,它在搜索中的數組和替換,這樣你就可以做其他一些事情,而不是:

一)確保未替換的號碼是可識別的。例如,首先使用正則表達式將所有數字用方括號括起來(或者你知道內容還沒有的其他東西);然後查找[1]並替換爲432,查找[2]並替換爲32等;這樣你明確地標記你與做了什麼,你仍然需要做

B)使用的正則表達式拿起所有的數字("\d+"),並更換有功能這將查找正確的更換。這實際上是同步解決方案,並且是我推薦的解決方案。不需要循環。

+0

如何同時更換它們? –

+0

對不起,花時間寫出來。 – Amadan