包含“的打印行”;字;python

包含“的打印行”;字;python,python,pattern-matching,match,Python,Pattern Matching,Match,我只想打印以下输出中包含“服务器”的行: 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,

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

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
现在,上面这段代码打印的文本块与我文章开头描述的完全相同。我只是不明白为什么会这样

正如我所说,我只想打印包含“Server”的行,如果可能的话,不需要正则表达式。如果不可能,使用正则表达式

请帮忙,谢谢

编辑:到目前为止,我的完整代码粘贴在此处: EDIT2:为了完整起见,在hosts.txt中当前有一个名为“google.com”的主机

更新

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

使用

扩展(headers.splitlines())

而不是

websiteheaders.append(标题)


他为我做了这件事。谢谢大家。

网站标题是否真的是一个按行拆分的列表?因为如果是字符串,则应使用:

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

+1尽管我建议拆分行,除非您确定是否使用了尾行编码……是的,websiteheaders是一个列表。如果我实现上面的代码,我会得到以下错误:AttributeError:“list”对象没有属性“splitlines”,我可以将列表转换为str,例如:text=str(websiteheaders)并实现上面的代码段,但它只会打印一个完整的字符串…@bryanvan:正确的方法是
text='\n'。加入(websiteheaders)
但是不要麻烦了。问题出在其他地方。我已经更新了我的答案,对我来说,你的代码运行得很好。你的列表和我的一样吗(见上文)?到目前为止,我已经将我的代码粘贴到了我的原始帖子中。我很好奇有什么可能是错误的!到目前为止,请告诉我们您在哪里创建了websiteheaders…如果您在websiteheaders:循环中的
for行之前
打印len(websiteheaders)
会得到什么?实际上,
打印repr(websiteheaders)
给出了什么?(您可以将输出编辑到您的问题中。)@DSM它实际上会输出1。@bryanvan:那就是问题所在。您的
websiteheaders
是一个列表,但它是一个列表,第一个元素存储了一个长字符串。因此,由于
Server
在该字符串中,它会传递并打印它。而不是
websiteheaders.append(headers)
,使用
websiteheaders.extend(headers.splitlines())
,这样你就有了一个包含每一行的列表。@DSM谢谢你,这确实是正确的答案。我一直认为追加是一种方法。
for single_line in websiteheaders.splitlines():
    if `Server` in single_line:
        print single_line