我有一个lid_details.txt
这样的文件:
sdlfksdflsdsdf - 10.3.2.142
qweioqwieuew - 10.123.23.12
98327499a87 - 10.3.2.142
sdflkuw39834tn - 10.3.2.142
kfpe84of9 - 10.3.2.142
dfgiueorgkdk - 10.3.2.142
其中我想用用户指定的新ipaddress替换ipaddress。
def modifyEntry(self, new_ip):
fileref = open ("lid_details.txt","a+")
for line in fileref:
match = re.search(r'(\w+)\s+-\s+(.*)', line)
if ( (match.group(1).strip()) == self.id):
print (match.group(2))
print new_ip
line = line.replace(match.group(2).strip() , new_ip)
print line
我将此文件导入另一个文件。考虑这是我从另一个文件调用的相应模块,其中new_ip
是我要替换的新ipaddress。
我能够在执行打印行语句时看到地址被反射回来。
但是当我打开文件lid_details.txt
时,我发现那个旧的ip仍然是相同的。
请让我知道解决方案,以及原因。
答案 0 :(得分:0)
您要修改的字符串是内存中的字符串。 您必须在文件中写入修改后的行,以便有效地修改它。
答案 1 :(得分:0)
使用fileref.readlines()
将所有行添加到列表中,使用enumerate
跟踪每行的索引,然后将更新的数据写入文件,如果要替换您执行的数据不想使用a
,因为这会附加到文件而不会覆盖旧值
def modifyEntry(self, new_ip):
with open ("lid_details.txt","r") as fileref:
lines = fileref.readlines()
for ind,line in enumerate(lines):
match = re.search(r'(\w+)\s+-\s+(.*)', line)
if match: # check if we have a match first
if match.group(1).strip() == self.id:
lines[ind]= line.replace(match.group(2) ,new_ip) # replace updated line in lines
with open("lid_details.txt","w") as f: # open in `w` mode and write updated values
for line in lines:
fileref.write(line)
您还应首先使用if match
,因为当您选中if match.group(1)
时,没有匹配ip的行会导致错误。
使用:
line = line.replace(match.group(2).strip() , new_ip)
只创建一个新的变量行,其值是更新的行字符串,而不写入文件,它不会更改文件内容。
如果您提交的文件如上所示,则不需要重新输入:
def modifyEntry( new_ip):
with open ("lid_details.txt","r+") as fileref:
lines = fileref.readlines()
for ind,line in enumerate(lines):
spl = line.rsplit(" ",1)
if spl[-1].rstrip() == self.id:
lines[ind] = line.replace(spl[1] ,new_ip+"\n")
with open("lid_details.txt","w") as f:
for line in lines:
fileref.write(line)
如果你只是想从线上获得ip,你可以使用:
match = re.findall(r'\d+\.\d+\.\d+\.\d+', line)
使用findall:
def modifyEntry( new_ip):
with open ("lid_details.txt","r+") as fileref:
lines = fileref.readlines()
for ind,line in enumerate(lines):
match = re.findall(r'\d+\.\d+\.\d+\.\d+', line) # match 10.0.0.1 etc..
if match:
if match[0] == self.id:
lines[ind] = line.replace(match[0] ,new_ip+"\n")
with open("lid_details.txt","w") as f:
for line in lines:
f.write(line)
您还应该使用with
打开文件,它会自动关闭它们,或者至少在您完成后关闭文件。