无法计算 python 中文本文件的行数
Cannot count the number of lines in a text file in python
最近我一直在研究 GUI python 纯文本编辑器。该代码调用以下函数,该函数应该计算已输入文本小部件的行数:
def numlines():
targetline = textPad.get(1.0, END)
targetline.split()
lines = 0
for line in targetline:
lines += 1
return lines
代码运行了,但是它没有给我正确的文件行数。事实上,每行的字母数和空格似乎会影响行数(例如:在两行中输入两个字母。我得到 6 行)。我找不到这个问题的解释。
我 运行 在 Windows 7 使用 python 2.7.9 和 tkinter。
替换:
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
实际上是 returns。它是否使用 \n
作为行分隔符?它是否在最后一行提供了最终的 \n
?在代码正确之前,您需要解决这些问题。
讨论
考虑这一行:
targetline.split()
让我们将其应用于上面的示例:
>>> targetline.split()
['line', '1', 'line', '3', 'line', '3']
有两点需要注意:
它默认在所有空白处拆分。
它returns一个列表。它不会改变 targetline
.
现在考虑:
lines = 0
for line in targetline:
lines += 1
return lines
由于 targetline
未被 split
改变,for
循环遍历 targetline
中的每个字符。因此,此循环计算 targetline
.
中的每个字符
它只是想要一个对象的长度,不需要这样的循环。 len
函数更简单。
最近我一直在研究 GUI python 纯文本编辑器。该代码调用以下函数,该函数应该计算已输入文本小部件的行数:
def numlines():
targetline = textPad.get(1.0, END)
targetline.split()
lines = 0
for line in targetline:
lines += 1
return lines
代码运行了,但是它没有给我正确的文件行数。事实上,每行的字母数和空格似乎会影响行数(例如:在两行中输入两个字母。我得到 6 行)。我找不到这个问题的解释。
我 运行 在 Windows 7 使用 python 2.7.9 和 tkinter。
替换:
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
实际上是 returns。它是否使用 \n
作为行分隔符?它是否在最后一行提供了最终的 \n
?在代码正确之前,您需要解决这些问题。
讨论
考虑这一行:
targetline.split()
让我们将其应用于上面的示例:
>>> targetline.split()
['line', '1', 'line', '3', 'line', '3']
有两点需要注意:
它默认在所有空白处拆分。
它returns一个列表。它不会改变
targetline
.
现在考虑:
lines = 0
for line in targetline:
lines += 1
return lines
由于 targetline
未被 split
改变,for
循环遍历 targetline
中的每个字符。因此,此循环计算 targetline
.
它只是想要一个对象的长度,不需要这样的循环。 len
函数更简单。