检查文件中是否存在一行
我该如何检查一个文件中是否存在某一行呢?
如果那一行不存在,我还想把它写入文件。
这是我目前的尝试:
logfile = open('ip.log', 'a+')
while 1:
line = logfile.readline()
#line.replace("\n", "")
print line
if line == str(self.CLIENT_HOST):
print "Line Found Skipping"
else:
logfile.write(str(self.CLIENT_HOST)+"\n")
if not line:
print "EOF Reached"
break
print line
logfile.close()
7 个回答
7
我觉得这个方法应该可以用,而且比其他的答案更简洁、更可靠。如果不行的话,你可能需要打开另一个文件来写入(第一个文件用 'r'
,第二个文件用 'a'
)。另外,我选择使用 x.rstrip('\r\n')
和 ==
,而不是 in
,这样可以确保比较是正确的。我不太清楚你的 CLIENT_HOST
变量是什么。如果你的 CLIENT_HOST
已经是字符串类型,那就丢掉第一行,其他的地方直接引用它就可以了。
value = str(self.CLIENT_HOST)
with open('ip.log', 'a+') as f:
if not any(value == x.rstrip('\r\n') for x in f):
f.write(value + '\n')
8
如果你想在日志文件中添加一个客户端主机字符串,但前提是这个字符串还没有被添加过,你可以这样做:
with open('ip.log', 'r+') as f:
for line in f:
if self.CLIENT_HOST in line:
break
else: # not found
print >>f, self.CLIENT_HOST
注意:这里的 else
语句的缩进并不是错误。这是Python的一种特性,允许 for
和 while
循环有一个 else
子句。当循环内部没有执行 break
语句时,这个 else
的内容会被执行。
12
logfile = open('ip.log', 'r')
loglist = logfile.readlines()
logfile.close()
found = False
for line in loglist:
if str(self.CLIENT_HOST) in line:
print "Found it"
found = True
if not found:
logfile = open('ip.log', 'a')
logfile.write(str(self.CLIENT_HOST)+"\n")
logfile.close()
这是我第一个快速解决方案。虽然很简单,不够完善,但应该能用。