无法计算python中文本文件中的行数

时间:2015-02-12 22:52:08

标签: python-2.7 tkinter text-editor text-widget

最近我一直在研究GUI python纯文本编辑器。代码调用以下函数,该函数应该计算已输入文本小部件的行数:

def numlines():
    targetline = textPad.get(1.0, END)
    targetline.split()
    lines = 0
    for line in targetline:
        lines += 1
    return lines

代码运行,但是它没有在文件中给出正确的行数。事实上,似乎每行和空格的字母数会影响行数(例如:在两行中我输入两个字母。我得到6行)。我找不到这个问题的解释。

我使用python 2.7.9和tkinter在Windows 7上运行。

1 个答案:

答案 0 :(得分:1)

替换:

targetline.split()
lines = 0
for line in targetline:
    lines += 1
return lines

使用:

return len(targetline.split('\n'))

实施例

让我们创建一个示例targetline

>>> targetline="line 1\nline 3\nline 3"
>>> print targetline
line 1
line 3
line 3

现在,让我们来计算一下:

>>> len(targetline.split('\n'))
3

我在这里没有提到的问题是textPad.get实际返回的内容。是否使用\n作为行分隔符?它是否在最后一行提供了最终\n?这些是在代码正确之前需要解决的问题。

讨论

考虑这一行:

targetline.split()

让我们将它应用于上面的示例:

>>> targetline.split()
['line', '1', 'line', '3', 'line', '3']

有两点需要注意:

  1. 默认情况下,它会在所有空格上分割。

  2. 返回一个列表。它不会改变targetline

  3. 现在考虑:

    lines = 0
    for line in targetline:
        lines += 1
    return lines
    

    由于targetline split未被for改变,targetline循环遍历targetline中的每个字符。因此,此循环计算len中的每个字符。

    它只需要一个对象的长度,不需要这样的循环。 {{1}}功能更简单。