检查文件python中是否存在一行

时间:2011-10-15 01:11:09

标签: python

如何检查文件中是否存在行,如果使用Python不存在则将该行写入文件

这是我目前的尝试


    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 个答案:

答案 0 :(得分:9)

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()

这是我的第一个快速解决方案。非常不洁净,但尚未成熟,但应该有效。

答案 1 :(得分:4)

要向日志文件追加客户端主机字符串(如果它尚不存在),您可以:

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语句的缩进不是错误。允许forwhile循环具有else子句是Python的一项功能。如果在循环内没有执行break语句,则运行它。

答案 2 :(得分:4)

我认为这应该有效,并且它比任何其他答案更整洁,更健壮。如果没有,那么您可能需要打开另一个文件进行写入(第一个文件'r',第二个文件'a')。我也开始使用x.rstrip('\r\n')==而不是in来确保它是正确的。我不知道你的CLIENT_HOST变量是什么。如果您的CLIENT_HOST已经是str,请丢弃第一行并将其他行更改为直接引用它。

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')

答案 3 :(得分:2)

使用python过滤器:

file = open('ip.log', 'r')
flines = file.readlines()
res = filter(lambda x: self.CLIENT_HOST in x, flines)
if len(res) == 0:
  file.write(str(self.CLIENT_HOST)+"\n")
  file.close()

答案 4 :(得分:0)

将open('ip.log','a +')更改为open('ip.log','r'),然后再次写入文件或写入新文件。否则你只是使文件无限长。

答案 5 :(得分:0)

对行进行迭代可以让您在找到匹配项时停止加载文件,并防止您必须将整个文件保存在内存中。

def log_host(self):
    host = str(self.CLIENT_HOST)

    with open('ip.log', 'r+') as logfile:
        for line in logfile:
            if line.strip() == host:
                return

        # Move to the end of the file:
        logfile.seek(0, 2)
        logfile.write(host + "\n")

答案 6 :(得分:0)

可能是这样的

line="the line you are searching for"

logfile = open('ip.log', 'r')
loglist = logfile.readlines()
logfile.close()

if line not in loglist:
    loglist.append(line)

new_logfile = open("pathToTheFile/logfile", 'w')
for lines in loglist:
    new_logfile.write(lines)