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:]
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
如果可能,我将不胜感激。 谢谢
答
由于filedata.replace(ad1 , var1)
是贪婪的,您的地址都被替换。你可以通过给它一个可选的第三个参数来限制它:filedata.replace(ad1 , var1, 1)
告诉它做最多1
替换,或者你可以扩大你的捕获组:'(address\s.*?)\s'
包括“地址”,并使var1 = "address ad1"
,以便filedata.replace
只发现具有“地址“
按行读取文件?只有在包含地址而不是网络的情况下才更换该行? –
@ cricket_007不是一个坏主意..如果只需要简单的匹配,regex实际上通常比简单的字符串操作要慢。正则表达式的好处是灵活性和复杂的模式,而不是速度。 – Aaron