我希望使用python模块从远程文件中读取特定的字节。我正在使用urllib2。特定字节在意义上的字节的形式为Offset,Size。我知道我们可以使用urlopen(link).read(X)从远程文件读取X个字节数。有什么方法可以读取从长度Offset (长度为Size)开始的数据吗?
def readSpecificBytes(link,Offset,size):
# code to be written发布于 2014-03-31 23:59:34
这将适用于许多服务器(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()请注意,这种方法意味着服务器不必发送,也不需要下载不需要/不想要的数据,如果您只需要大文件中的少量数据,就可以节省大量的带宽。
当它不能工作时,只需先读取第一组字节即可。
有关更多详细信息,请参阅维基百科关于HTTP标题的文章。
发布于 2014-03-31 23:48:41
不幸的是,urllib2.urlopen()返回的类似文件的对象实际上没有seek()方法。您需要通过这样的操作来解决这一问题:
def readSpecificBytes(link,Offset,size):
f = urllib2.urlopen(link)
if Offset > 0:
f.read(Offset)
return f.read(size)https://stackoverflow.com/questions/22774266
复制相似问题