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

Python—写入文件文本的有效方法?,python,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:

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

以下是我所拥有的:

#!/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
我的问题是,当我想为
var1
替换
ad1
时,它不会只替换我的
地址
,只会替换
网络
,因为它们的IP相同

我的输出是这样的:

地址ad1

网络ad1

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

地址ad1

网络192.168.6.6


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

您的两个地址都被替换,因为
filedata.replace(ad1,var1)
是贪婪的。您可以通过给它提供可选的第三个参数来限制它:
filedata.replace(ad1,var1,1)
告诉它最多进行
1
替换,或者您可以扩展捕获组:
'(address\s.*?\s'
以包括“address”,并使
var1=“address ad1”
以便
filedata.replace
只查找其中包含“address”的行

因为
filedata.replace(ad1,var1)
贪婪,您的两个地址都被替换。您可以通过给它提供可选的第三个参数来限制它:
filedata.replace(ad1,var1,1)
告诉它最多进行
1
替换,或者您可以扩展捕获组:
'(address\s.*?\s'
以包括“address”,并使
var1=“address ad1”
以便
filedata.replace
只查找其中包含“地址”的行

逐行读取文件?仅当包含地址而非网络时才替换该行?@cricket\u 007这主意不错。。如果只需要简单的匹配,regex实际上通常比简单的字符串操作慢。regex的好处是灵活性和复杂的模式,而不是速度?仅当包含地址而非网络时才替换该行?@cricket\u 007这主意不错。。如果只需要简单的匹配,regex实际上通常比简单的字符串操作慢。regex的好处是灵活性和复杂的模式,而不是速度。