2024-09-24 16:42:32 发布
网友
我想使用python模块从远程文件读取特定的字节。我正在使用urllib2。以Offset,Size的形式表示的特定字节。我知道我们可以使用urlopen(link).read(X)从远程文件读取X个字节。有没有什么方法可以让我读取从Offset开始,长度为Size的数据吗。?在
Offset
Size
urlopen(link).read(X)
def readSpecificBytes(link,Offset,size): # code to be written
这将适用于许多服务器(Apache等),但并不总是有效,尤其是对于动态内容,如CGI(*.php,*.CGI等):
import urllib2 def get_part_of_url(link, start_byte, end_byte): req = urllib2.Request(link) req.add_header('Range', 'bytes=' + str(start_byte) + '-' + str(end_byte)) resp = urllib2.urlopen(req) content = resp.read()
请注意,这种方法意味着服务器永远不必发送,也永远不会下载不需要/不需要的数据,如果您只想从一个大文件中获取少量数据,这可以节省吨的带宽。在
当它不工作时,只需在其余字节之前读取第一组字节。在
有关详细信息,请参见Wikipedia Article on HTTP headers。在
不幸的是,urllib2.urlopen()返回的类似文件的对象实际上没有seek()方法。您需要通过以下方式解决此问题:
seek()
def readSpecificBytes(link,Offset,size): f = urllib2.urlopen(link) if Offset > 0: f.read(Offset) return f.read(size)
这将适用于许多服务器(Apache等),但并不总是有效,尤其是对于动态内容,如CGI(*.php,*.CGI等):
请注意,这种方法意味着服务器永远不必发送,也永远不会下载不需要/不需要的数据,如果您只想从一个大文件中获取少量数据,这可以节省吨的带宽。在
当它不工作时,只需在其余字节之前读取第一组字节。在
有关详细信息,请参见Wikipedia Article on HTTP headers。在
不幸的是,urllib2.urlopen()返回的类似文件的对象实际上没有
seek()
方法。您需要通过以下方式解决此问题:相关问题 更多 >
编程相关推荐