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的好处是灵活性和复杂的模式,而不是速度。