在我尝试获取Apache日志解析器时,我尝试使用以下代码过滤IP地址:
for r in log:
host_line = "'",r['host'],"'"
for line in host_line:
if not line.startswith("178.255.20.20"):
print line.strip()
此代码的结果是:
p4fdf6780.dip0.t-ipconnect.de
'
'
79.223.103.128
'
'
p4fdf6780.dip0.t-ipconnect.de
'
'
使用line.replace("'", "")
我删除单引号。
print line.replace("'", "")
结果:
p4fdf6780.dip0.t-ipconnect.de
79.223.103.128
p4fdf6780.dip0.t-ipconnect.de
这让我有两个换行符。
如何避免这些换行? 是否有一种解决方案或更好的解决方案 - 更多的pythonic方式来获得我想要的东西?
答案 0 :(得分:3)
你希望程序做什么做? for line in host_line
循环的目的是什么?
如果您只想打印178.255.20.20以外的主机,以下内容是否会起作用?
for r in log:
host = str(r['host']).strip() # not sure if the str() is required, depends on type of r['host']
if not host.startswith("178.255.20.20"):
print host
答案 1 :(得分:0)
只需更改您的代码,如下所示。您不需要使用replace
功能。
for r in log:
host_line = "'",r['host'],"'"
for line in host_line:
if not line.startswith("178.255.20.20"):
if not line == "'":
print line.strip()
答案 2 :(得分:0)
一种方法是使用bash和专用的搜索工具,如Ag,或只是一个标准的grep,这会使它真的很快,因为它是C:
grep -v "178.255.20.20" your_log.txt | grep -v -E "^'"
如果您需要坚持使用python,那么尝试更好地使用strip,这样它也会删除引号字符并仅在不为空时打印该行:
for r in log:
host_line = "'",r['host'],"'"
for line in host_line:
if not line.startswith("178.255.20.20"):
line = line.strip("'\n")
if len(line) > 0: print line