检查文件中是否存在一行

9 投票
7 回答
56423 浏览
提问于 2025-04-17 04:21

我该如何检查一个文件中是否存在某一行呢?

如果那一行不存在,我还想把它写入文件。

这是我目前的尝试:

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的一种特性,允许 forwhile 循环有一个 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()

这是我第一个快速解决方案。虽然很简单,不够完善,但应该能用。

撰写回答