2014-10-28 101 views
0

根據documentationurllib2.urlopen()返回文件類型對象。爲什麼我不能在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

也許['StringIO'](https://docs.python.org/2/library/stringio.html)對象可以幫助你嗎? – 2014-10-28 01:20:03

+2

這是一個*類似文件的對象。這實際上意味着什麼取決於誰在執行它的意思。在網絡流上搜索()'沒有任何意義,所以這是行不通的。在HTTP *響應中'write()'也沒有意義。*所以這也不起作用。基本上,它的行爲足夠像一個文件,你可以像讀一樣。在其他情況下,「類似文件」可能意味着其他事情。 – kindall 2014-10-28 01:22:10

回答

1

正如評論解釋了對象由urllib2.urlopen返回是「類文件」,而不是文件類型。因此它缺少許多文件所具有的方法。

如果你真的想要的文件方法,那麼你應該考慮創建一個StringIO對象(更高效地使用cStringIO代替)。

相關問題