Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 无法在python中计算文本文件中的行数_Python 2.7_Tkinter_Text Editor_Text Widget - Fatal编程技术网

Python 2.7 无法在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 代码运行,但是它没有给我文件中正确的行数。事实上,似乎每行的字母数和空格会影

最近我一直在开发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上运行。

替换:

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