最近我一直在研究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上运行。
答案 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']
有两点需要注意:
默认情况下,它会在所有空格上分割。
返回一个列表。它不会改变targetline
。
现在考虑:
lines = 0
for line in targetline:
lines += 1
return lines
由于targetline
split
未被for
改变,targetline
循环遍历targetline
中的每个字符。因此,此循环计算len
中的每个字符。
它只需要一个对象的长度,不需要这样的循环。 {{1}}功能更简单。