在Python中将文件对象读取为字符串

31

我正在使用 urllib2 读取一个网页。我需要对源代码进行快速正则表达式匹配,提取一些变量,但是 urllib2 提供的是文件对象而不是字符串。

作为 Python 的新手,我不知道如何使用文件对象来完成这个任务。有没有一种快速将其转换为字符串的方法?

3个回答

78

您可以使用Python的交互模式来寻找解决方案。

如果f是您的对象,您可以输入dir(f)来查看所有方法和属性。其中有一个叫做read。输入help(f.read),它会告诉您f.read()是从文件对象中检索字符串的方法。


3
谢谢你提供详细的答案(尤其是关于查找对象属性/方法)。.read()效果很好。 - Oli
5
“教人钓鱼”这一派别的回答很棒。如果可以,我会给你加两分! - Will Dean
5
有时候我们只是想把stackoverflow当成一个快速参考书来使用。gimel的回答对于搜索者来说更有用。 - Kirk Woll

14

来自文档file.read() (我的强调):

file.read([size])

从文件中最多读取 size 个字节(如果读到 EOF,则少于 size 个字节)。 如果省略了大小参数或将其设为负数,则读取所有数据直到EOF被达到。 字节将作为字符串对象返回。 当立即遇到EOF时,会返回空字符串。 (对于某些文件,例如 ttys,有意义的是在遇到EOF后继续读取。)请注意,该方法可能会调用底层C函数fread多次,以尽可能地获取接近大小字节的数据。 还要注意,在非阻塞模式下,即使没有给出大小参数,也可能返回比请求的数据更少。

请注意,对大型字符串对象进行正则表达式搜索可能不会很有效率,而考虑使用逐行搜索,使用file.next()(文件对象本身就是其迭代器)。


5

Michael Foord,也称为Voidspace,有一篇关于urllib2的优秀教程,您可以在此处找到:

urllib2 - 缺失的手册

您正在做的事情应该非常简单,请观察以下示例代码:

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接