如何排除空行的行号

时间:2015-10-06 14:31:33

标签: python tkinter

我最近试图在Tkinter中实现一个额外的功能。我的问题很容易理解。下面我提到了我的代码和XML文件。

data.xml中:

<?xml version="1.0" ?>
<p1:FILE xmlns:p1="http://www.example.org/eHorizon">


     <Time nTimestamp="12">
            <Test>
                <Car/>
            </Test>
     </Time>
</p1:FILE>

代码:

from Tkinter import *
from tkFileDialog import askopenfilename
from distutils.filelist import findall
from lxml import etree

fileOpen = open("C:/Users/your-location/data.xml")

root = Tk()
text = Text(root, height=30, width = 40)
text.pack()

text.insert(END,fileOpen.read())

recovering_parser = etree.XMLParser(recover=True)
xmlLog = etree.parse("C:/Users/your-location/data.xml",parser=recovering_parser).getroot()    

ElementsList = xmlLog.findall("Time")

print "The line number of Time element is = ", ElementsList[0].sourceline #prints 5, 
                       #but I want to ignore blank lines and print #answer as 3 (please look in notepad++ format below)

root.mainloop()

notepad ++中的data.xml:

enter image description here

我想要的是什么:

我只想在有空行的地方省略行号。因此,每当我使用sourceline时,它应该返回不包括所有空格的行号

在上面的代码print "The line number of Time element is = ", ElementsList[0].sourceline中应该打印答案3(不包括空行)而不是5(包括空白行)。

我尝试了什么:

我尝试到处寻找,但没有得到我想要的东西。坦率地说,到目前为止,我甚至无法思考如何启动。我已经在使用sourceline,只是考虑所有空格返回给定的行号。

编辑:我正在使用sourceline因为我正在处理xml元素并使用lxml库来提取xml数据。

1 个答案:

答案 0 :(得分:2)

如果你真的想这样做,我会看到两个选项:

删除空行

重新创建没有空行的文件。

跟踪空白行

跟踪每个实际源行号之前存在多少空行。从实际的源行号中减去它。

# track blanks
blanks_before_line = [0]
with open('data.xml') as f:
    for line in f:
        new_blanks = blanks_before_line[-1]
        if not line.strip():
            new_blanks += 1
        blanks_before_line.append(new_blanks)

# now in your code subtract it
# .....
real_sourceline = ElementsList[0].sourceline
adjusted_sourceline = real_sourceline - blanks_before_line[real_sourceline - 1]
print "The line number of Time element is = ", adjusted_sourceline