Python - 写入文件文本的有效方法?

时间:2016-11-18 14:55:28

标签: python

我正在写一个文本文件,但它没有像我预期的那样正常工作。

以下是我所拥有的:

#!/usr/lib/env python
import re

file = open("address.txt","r")
content = file.read()
file.close()
content = content.split('LAN ')[1:]
dic = {}
for lan in content:
    dic[int(lan[0])] = lan[1:] 



def address(lan_index):
    address = re.findall('address\s(.*?)\s',dic[lan_index] )
    if len(address) > 0:
        print 'LAN', lan_index, ":", address[0]
    else:
        print 'No Address Found!'
    return address[0]


ad1 = str(address(1))
new_ad = ad1
var1 = 'ad1'


filedata = None
with open('address.txt', 'r') as file :
  filedata = file.read()

filedata = filedata.replace(ad1 , var1)

with open('address.txt', 'w') as file:
  file.write(filedata)

这是我的文字档案:

#line addresses LAN 1
        address 192.168.6.6
        network 192.168.6.6

我的问题是,当我想替换ad1 var1时,它不会只替换address,只会替换network,并且它们具有相同的IP。

我的输出是这样的:

  

地址ad1

     

网络ad1

是否有一种有效且可行的方法来避免这种情况并得到类似的结果:

  

地址ad1

     

网络192.168.6.6

如果可能,我将非常感激。 谢谢

1 个答案:

答案 0 :(得分:2)

您的地址都被替换,因为filedata.replace(ad1 , var1)是贪婪的。您可以通过为其提供可选的第三个参数来限制它:filedata.replace(ad1 , var1, 1)告诉它最多1个替换,或者您可以扩展您的捕获组:'(address\s.*?)\s'以包含"地址& #34;和make var1 = "address ad1",以便filedata.replace只找到包含"地址"的行在他们中