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には現在「google.com」という名前のホストが1つあります。

アップデート

私のコードは実際には正常に機能していましたが、リストのWebサイトヘッダーに配置されたデータが複数のエントリではなく1つの大きな文字列であることが保証された、私のコードの他の部分に誤りがありました。上記のコードでは、もちろん「サーバー」を検索し、エントリ全体を出力します。私の場合は、完全な(大きな)文字列でした。

使用する

websiteheaders.extend(headers.splitlines())

それ以外の

websiteheaders.append(headers)

私のためにトリックをしました。たくさんの人に感謝します。

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 に答える