2012-04-20 96 views
0

我試圖在同一時間蟒蛇閱讀的網站源代碼行同時

例如100線讀取從網站的源代碼100行:

self.code = urllib.request.urlopen(uri) 

#Get 100 first lines 
self.lines = self.getLines() 

... 

#Get 100 next lines 
self.lines = self.getLines() 

我getLines代碼像這樣:

def getLines(self): 
    res = [] 
    i = 0 

    while i < 100: 
     res.append(str(self.code.readline())) 
     i+=1 

return res 

但問題是,getLines()總是返回前100行代碼。

我已經看到了next()tell()seek()一些解決方案,但似乎這些功能都沒有在類HTTPResponse類中實現。根據the documentationurllib.request.urlopen(uri)回報就像對象的文件

回答

3

,所以你應該能夠做到:

from itertools import islice 

def getLines(self) 
    res = [] 
    for line in islice(self.code,100): 
     res.append(line) 
    return res 

有一個在itertools documentationislice更多信息。使用迭代器將避免while循環和手動增量。

如果你絕對必須使用readline(),它建議使用for循環,即

for i in xrange(100): 
    ... 
0

這爲我工作。

#!/usr/bin/env python 

import urllib 

def getLines(code): 
    res = [] 
    i = 0 

    while i < 100: 
     res.append(str(code.readline())) 
     i+=1 

    return res 

uri='http://www.google.com/' 
code = urllib.urlopen(uri) 

#Get 100 first lines 
lines = getLines(code) 

print lines 

#Get 100 next lines 
lines = getLines(code) 

print lines