Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用urlopen()读取特定字节_Python_Urllib2 - Fatal编程技术网

Python 使用urlopen()读取特定字节

Python 使用urlopen()读取特定字节,python,urllib2,Python,Urllib2,我想使用python模块从远程文件读取特定字节。我正在使用urllib2。特定字节以偏移量、大小的形式表示。我知道我们可以使用urlopenlink.readX从远程文件读取X个字节。有什么方法可以读取从长度大小偏移量开始的数据吗 不幸的是,urllib2.urlopen返回的类似文件的对象实际上没有seek方法。您需要通过以下方式解决此问题: def readSpecificBytes(link,Offset,size): f = urllib2.urlopen(link) i

我想使用python模块从远程文件读取特定字节。我正在使用urllib2。特定字节以偏移量、大小的形式表示。我知道我们可以使用urlopenlink.readX从远程文件读取X个字节。有什么方法可以读取从长度大小偏移量开始的数据吗

不幸的是,urllib2.urlopen返回的类似文件的对象实际上没有seek方法。您需要通过以下方式解决此问题:

def readSpecificBytes(link,Offset,size):
    f = urllib2.urlopen(link)
    if Offset > 0:
        f.read(Offset)
    return f.read(size)
不幸的是,urllib2.urlopen返回的类似文件的对象实际上没有seek方法。您需要通过以下方式解决此问题:

def readSpecificBytes(link,Offset,size):
    f = urllib2.urlopen(link)
    if Offset > 0:
        f.read(Offset)
    return f.read(size)

这将适用于许多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()
请注意,这种方法意味着服务器永远不必发送和下载您不需要/想要的数据,如果您只需要大文件中的少量数据,则可以节省大量带宽

当它不工作时,只需先读取第一组字节,然后再读取其余字节


有关更多详细信息,请参阅。

这将适用于许多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()
请注意,这种方法意味着服务器永远不必发送和下载您不需要/想要的数据,如果您只需要大文件中的少量数据,则可以节省大量带宽

当它不工作时,只需先读取第一组字节,然后再读取其余字节


有关更多详细信息,请参阅。

关于:?或者:有关可能的解决方案,请参阅此处阅读完整答案关于:?或者:有关可能的解决方案,请参阅此处阅读完整答案注意,对于非常大的文件,这将是一种相当昂贵的方法。到目前为止,您必须下载所有内容。请注意,对于非常大的文件,这将是一种相当昂贵的方法。到目前为止,您必须下载所有内容。