2012-04-20 99 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