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 

我的问题是,当我想要替换ad1var1它不会取代只是我address仅将取代network以及他们拥有相同的IP。

我的输出是这样的:

地址AD1

网络AD1

是否有一个有效的和可能的方式,以避免这一点,并得到这样的:

地址ad1

网络192.168.6.6

如果可能,我将不胜感激。 谢谢

+1

按行读取文件?只有在包含地址而不是网络的情况下才更换该行? –

+0

@ cricket_007不是一个坏主意..如果只需要简单的匹配,regex实际上通常比简单的字符串操作要慢。正则表达式的好处是灵活性和复杂的模式,而不是速度。 – Aaron

由于filedata.replace(ad1 , var1)是贪婪的,您的地址都被替换。你可以通过给它一个可选的第三个参数来限制它:filedata.replace(ad1 , var1, 1)告诉它做最多1替换,或者你可以扩大你的捕获组:'(address\s.*?)\s'包括“地址”,并使var1 = "address ad1",以便filedata.replace只发现具有“地址“