为什么我不能在urllib2.urlopen()返回时使用文件方法

时间:2014-10-28 01:15:49

标签: python urllib2

根据documentation urllib2.urlopen()返回文件类型对象。

由于它是一个文件类型对象,我希望能够在它上面进行读/写/搜索等。

但唯一可行的文件方法是read()。下面我有一些示例代码,其中产生的输出写为注释。

import urllib2

page = urllib2.urlopen("http://www.perdu.com")

# OK, prints page contents
print page.read()

# Produces empty string (because EOF), what if I need to print the contents multiple times?
print page.read()

# AttributeError: addinfourl instance has no attribute 'seek'
print page.seek(0)

# AttributeError: addinfourl instance has no attribute 'write'
page.write("hello")

我试图理解为什么我不能支持seekwrite方法,如文件类型对象应该和替代方法有哪些?

我想对urlopen返回的网络内容进行一些操作,例如附加一些文字。

我需要保留一个文件类型对象(即:我将插入此修改后的网页以仅接受文件类型对象的方法)

1 个答案:

答案 0 :(得分:1)

正如评论中所解释的那样,urllib2.urlopen返回的对象是"类似文件的#34;而不是类型文件。因此,它缺少文件的许多方法。

如果你真的想要文件方法,那么你应该考虑创建一个StringIO对象(为了更有效地使用cStringIO)。