[英]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
语句的缩进不是错误。 允许for
和while
循环使用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.