2008-12-06 93 views
28

我使用urllib2來讀取頁面。我需要對源做一個快速的正則表達式,並提取一些變量,但urllib2作爲文件對象而不是字符串。在Python中讀取文件對象作爲字符串

我是新來的python所以我很努力地看到我如何使用文件對象來做到這一點。有沒有一種快速的方法將其轉換爲字符串?

回答

74

您可以在交互模式下使用Python來搜索解決方案。

如果f是您的對象,您可以輸入dir(f)查看所有方法和屬性。有一個叫做read。輸入help(f.read),它告訴你f.read()是從文件對象中檢索字符串的方式。

+3

感謝深入的回答(特別是關於查找對象屬性/方法)。 .read()完美工作。 – Oli 2008-12-06 13:03:09

13

從DOC file.read()(我的重點):

file.read([大小])

閱讀的size從文件(如果少讀取得尺寸字節之前打EOF )。如果size參數爲負值或省略,請讀取所有數據,直到達到EOF。 字節以字符串對象的形式返回。立即遇到EOF時返回空字符串。 (對於某些文件,例如ttys,在EOF命中後繼續讀取是有意義的。)請注意,此方法可能會多次調用基礎C函數fread以努力獲取儘可能接近大小的字節。還要注意的是,當處於非阻塞模式時,即使沒有給出大小參數,也可能返回比請求的數據更少的數據。

要知道,一個大的字符串對象的正則表達式搜索可能不是有效的,並且考慮做搜索行由行,用file.next()(文件對象是自己的迭代器)。

5

邁克爾Foord,又名Voidspace對urllib2的一個很好的教程,你可以在這裏找到: urllib2 - The Missing Manual

你在做什麼應該是非常簡單,觀察此示例代碼:

import urllib2 
import re 
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml") 
html = response.read() 
pattern = '(V.+space)' 
wordPattern = re.compile(pattern, re.IGNORECASE) 
results = wordPattern.search(html) 
print results.groups()