首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用urlopen()读取特定字节

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

Stack Overflow用户
提问于 2014-03-31 23:41:30
回答 2查看 1.5K关注 0票数 1

我希望使用python模块从远程文件中读取特定的字节。我正在使用urllib2。特定字节在意义上的字节的形式为OffsetSize。我知道我们可以使用urlopen(link).read(X)从远程文件读取X个字节数。有什么方法可以读取从长度Offset (长度为Size)开始的数据吗?

代码语言:javascript
复制
def readSpecificBytes(link,Offset,size):
# code to be written
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-31 23:59:34

这将适用于许多服务器(Apache等),但并不总是工作,特别是。不适用于动态内容,如CGI (*.php、*.cgi等):

代码语言:javascript
复制
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标题的文章

票数 3
EN

Stack Overflow用户

发布于 2014-03-31 23:48:41

不幸的是,urllib2.urlopen()返回的类似文件的对象实际上没有seek()方法。您需要通过这样的操作来解决这一问题:

代码语言:javascript
复制
def readSpecificBytes(link,Offset,size):
    f = urllib2.urlopen(link)
    if Offset > 0:
        f.read(Offset)
    return f.read(size)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22774266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档