Python 2.7 无法在python中计算文本文件中的行数
最近我一直在开发GUI python纯文本编辑器。该代码调用以下函数,该函数用于计算已输入文本小部件的行数:Python 2.7 无法在python中计算文本文件中的行数,python-2.7,tkinter,text-editor,text-widget,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 代码运行,但是它没有给我文件中正确的行数。事实上,似乎每行的字母数和空格会影
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上运行。替换:
targetline.split()
lines = 0
for line in targetline:
lines += 1
return lines
与:
例子
让我们创建一个示例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
功能更简单。谢谢。它工作了,但我不得不添加lines=lines-1,或者代码添加了额外的一行。@PseudonymEnigma非常好。这似乎意味着textPad.get
返回最后一个\n
字符。
lines = 0
for line in targetline:
lines += 1
return lines