5

我只想在下面的输出中打印包含“服务器”的行:

Date: Sun, 16 Dec 2012 20:07:44 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=da8d52b67e5c7522:FF=0:TM=1355688464:LM=1355688464:S=CrK5vV-qb3UgWUM1; expires=Tue, 16-Dec-2014 20:07:44 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=nICkwXDM6H7TNQfHbo06FbvZhO61bzNmtOn4HA71ukaVDSgywlBjBkAR-gXCpMNo1TlYym-eYMUlMkCHVpj7bDRwiHT6jkr7z4dMrApDuTk_HuTrZrkoctKlS7lXjz9a; expires=Mon, 17-Jun-2013 20:07:44 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Connection: close

此信息是从名为 websiteheaders 的列表中获取的。我有下面的一段代码让我发疯,因为它不能正常工作......

for line in websiteheaders:
    if "Server" in line:
        print line

现在,上面的这段代码打印出与我文章开头描述的完全相同的文本块。我只是似乎不明白为什么会这样......

正如我所说,我只想打印包含“服务器”的行,如果可能的话没有正则表达式。如果不可能,请使用正则表达式。

请帮忙,谢谢!

编辑:到目前为止,我的完整代码粘贴在这里:http ://pastebin.com/sYuZyvX9 编辑2:为了完整起见,在 hosts.txt 中目前有 1 个名为“google.com”的主机

更新

我的代码实际上运行良好,但在我的另一段代码中有一个错误,它确保放入列表 websiteheaders 的数据是 1 个大字符串而不是多个条目。在上面的代码中,它当然会找到“Server”并打印整个条目,在我的例子中是完整的(大)字符串。

使用

websiteheaders.extend(headers.splitlines())

代替

websiteheaders.append(标题)

为我做了伎俩。非常感谢你们。

4

2 回答 2

10

真的websiteheaders是一个被分割成一行的列表吗?因为如果它是一个字符串,你应该使用:

for line in websiteheaders.splitlines():
    if "Server" in line:
        print line

另外,一个很好的提示:我建议添加一些print遇到此类问题的语句。如果您要添加以下内容:

else:
    print 'WRONG LINE:', line

你可能会发现这个循环不是在每一行而是在每个字符上循环。

更新

那我不知道你的代码有什么问题。这就是我得到的:

In [3]: websiteheaders
Out[3]: 
['Date: Sun, 16 Dec 2012 20:07:44 GMT',
 'Expires: -1',
 'Cache-Control: private, max-age=0',
 'Content-Type: text/html; charset=ISO-8859-1',
 'Set-Cookie: PREF=ID=da8d52b67e5c7522:FF=0:TM=1355688464:LM=1355688464:S=CrK5vV-qb3UgWUM1; expires=Tue, 16-Dec-2014 20:07:44 GMT; path=/; domain=.google.com',
 'Set-Cookie: NID=67=nICkwXDM6H7TNQfHbo06FbvZhO61bzNmtOn4HA71ukaVDSgywlBjBkAR-gXCpMNo1TlYym-eYMUlMkCHVpj7bDRwiHT6jkr7z4dMrApDuTk_HuTrZrkoctKlS7lXjz9a; expires=Mon, 17-Jun-2013 20:07:44 GMT; path=/; domain=.google.com; HttpOnly',
 'P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."',
 'Server: gws',
 'X-XSS-Protection: 1; mode=block',
 'X-Frame-Options: SAMEORIGIN',
 'Connection: close"']

In [4]: for line in websiteheaders:
   ...:     if 'Server' in line:
   ...:         print line
   ...:         
Server: gws
于 2012-12-16T20:20:03.923 回答
2
for single_line in websiteheaders.splitlines():
    if `Server` in single_line:
        print single_line
于 2012-12-16T20:21:49.587 回答