Python:如何在列表中添加单词?

时间:2012-04-28 23:51:10

标签: python string list html-parsing append

好的,标题有点模糊,但我要做的是在线下载数据,解析它然后将解析后的'数据'放入excel文件中。

我在试图将数据放入矢量或列表时遇到困难。请注意,数据可以是单词或数字。另外,我的数据长度未知。我尝试了下面的代码:

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        d=[]
        d=d.append(data)

parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

d

Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
d
NameError: name 'd' is not defined

我环顾了论坛寻找答案,但似乎没有遇到任何问题。我是初学者,所以我可能会遗漏一些基本的东西吗?谢谢你的帮助...

4 个答案:

答案 0 :(得分:4)

在类方法中,您需要使用self来引用成员变量。

从这样的事情开始可能更有意义:

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.d = []
    def handle_data(self, data):
        self.d.append(data)

然后,要访问d,您需要指定类实例,例如

parser.d

编辑: global会有效,但除非有令人信服的理由,否则我认为你应该学会如何以正确的方式做事而不是混淆全局命名空间

答案 1 :(得分:2)

您的代码存在三个问题。

  • 每次调用方法时都会创建一个新的空列表。
  • list.append返回None(不是列表),因此现在包含一个元素的列表实际上并未存储在任何位置。
  • 分配给函数内部的变量会创建本地变量,而不是全局变量(除非您指定变量应该是global的全局变量关键字)。

请改为尝试:

d = []

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        d.append(data)

使用全局变量也是一种糟糕的风格。您可能需要考虑将d作为该类的属性,并为其提供更好的名称。

答案 2 :(得分:0)

如果要在模块范围内绑定名称,则需要在函数开头使用global

答案 3 :(得分:0)

这是你在找什么?

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    data = []
    def get_data(self):
        return self.data
    def handle_starttag(self, tag, attrs):
        pass
    def handle_endtag(self, tag):
        pass
    def handle_data(self, data):
        self.data.append(data)


# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')
print 'All data', parser.get_data()

输出:

All data ['Test', 'Parse me!']