如果不是line.startswith - 给出很多单引号和线条

时间:2014-11-18 09:20:08

标签: python

在我尝试获取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方式来获得我想要的东西?

3 个答案:

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