我正在编写一个包含IP地址统计信息的简单文件。
我使用此代码:
line = str('%s %12g %12g %12g' %(IP, STAT1, STAT2, THSD))
with open(ficresul, 'a+') as fico:
if not any(value == x.rstrip('\r\n') for x in fico):
fico.write(value + '\n' )
fico.close()
和输出是这样的:
192.168.0.10 15.8121 15.4317 18
192.168.0.20 18.625 12.5085 18
192.168.0.24 20.8323 23.252 18
192.168.0.17 17.6208 15.9218 18
它非常适合新的IP地址。但是我想更新统计数据,如果IP地址已经在文件中,而不是在新行中写入。
怎么做?
答案 0 :(得分:1)
最简单的方法是读取整个文件,在内存中更新它,然后将整个文件写回(如果有更改)。尝试就地更新行只有在你不改变任何行的长度时才有效,并且可能更容易出错。
将内容存储在内存中时,使用OrderedDict
按要查找的密钥存储它们。 OrderedDict
将有助于避免对行的排序进行虚假更改,这可能会很好。否则,您可以使用常规dict
。