Python从文件中删除元素

时间:2014-03-18 08:14:18

标签: python html

这是我的代码段:

from HTMLParser import HTMLParser
# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
        def handle_endtag(self, tag):
                if(tag == 'tr'):
                    textFile.write('\n')
        def handle_data(self, data):
                textFile.write(data+"\t")

textFile = open('instaQueryResult', 'w+')

# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
fh = open('/data/aman/aggregate.html','r')
l = fh.readlines()
for line in l:
        parser.feed(line)

我解析HTML文件并获得以下预期输出: -

plantype        count(distinct(SubscriberId))   sum(DownBytesNONE)      sum(UpBytesNONE)            sum(SessionCountNONE)
1006657 341175  36435436130     36472526498     694016
1013287 342280  36694005846     36533489363     697098
1006613 343867  36763692173     36755893252     699976
1014883 342436  36575951812     36572503611     695683
1003022 343238  36705838418     36637429353     698618
plantype        count(distinct(SubscriberId))   sum(DownBytesNONE)      sum(UpBytesNONE)            sum(SessionCountNONE)
1013287 342280  36694005846     36533489363     697098
1006657 341175  36435436130     36472526498     694016
1006613 343867  36763692173     36755893252     699976
1014883 342436  36575951812     36572503611     695683
1003022 343238  36705838418     36637429353     698618

此输出正确但我希望删除标题。我的第一行包含要从文件中删除的标题,只留下值。

预期产出:

1006657 341175  36435436130     36472526498     694016
1013287 342280  36694005846     36533489363     697098
1006613 343867  36763692173     36755893252     699976
1014883 342436  36575951812     36572503611     695683
1003022 343238  36705838418     36637429353     698618
1013287 342280  36694005846     36533489363     697098
1006657 341175  36435436130     36472526498     694016
1006613 343867  36763692173     36755893252     699976
1014883 342436  36575951812     36572503611     695683
1003022 343238  36705838418     36637429353     698618

有任何帮助吗? 感谢

3 个答案:

答案 0 :(得分:1)

由于您试图摆脱任何没有数字的内容,您可以尝试将handle_data(self, data)方法修改为:

def handle_data(self, data):
    if data.isdigit():
        textFile.write(data+"\t")

答案 1 :(得分:0)

我认为你的html数据有以下形式:

<table>
    <tr>
        <td>plantype</td>
        <td>count(distinct(SubscriberId))</td>
        ...
    </tr>
    <tr>
        <td>1006657</td>
        <td>341175</td>
        ...
    </tr>
</table>

您可以使用row_count变量来检查您是否在第一个tr-tag中。 使用row_counthandle_starttag设置为0。在handle_endtag中检查(并递增):

class MyHTMLParser(HTMLParser):
    row_count = 0
    def handle_starttag(self, tag, attrs):
        if (tag == 'table'):
            self.row_count = 0

    def handle_endtag(self, tag):
        if (tag == 'tr') and (self.row_count > 0):
            textFile.write('\n')
        self.row_count += 1

    def handle_data(self, tag):
        if self.row_count > 0:
            textFile.write(data+"\t")

答案 2 :(得分:0)

试试这个:

fh = open('/data/aman/aggregate.html','r')
l = fh.readlines()
for line in l:
    if 'plantype' not in line:
        parser.feed(line)

您正逐行阅读文件。当你将字符串的“if”部分放入“不在线”时,它会为其他行(你想要的那些行)执行下一个块。