繁体   English   中英

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

[英]check if a line exists in a file 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()

干杯

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

这是我的第一个快速解决方案。 非常不干净,但尚未复杂,但应该工作。

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

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语句,则运行它。

我认为这应该有效,并且它比任何其他答案更整洁,更健壮。 如果没有,那么您可能需要打开另一个文件进行写入(第一个文件'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')

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

可能是这样的

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)

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

迭代这些行允许您在找到匹配项时停止加载文件,并防止您必须将整个文件保存在内存中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM