为什么使用两种不同的方式对行进行计数不同。加载文本?

mar*_*lon 9 python

import pathlib

file_path = 'vocab.txt'
vocab = pathlib.Path(file_path).read_text().splitlines()
print(len(vocab))

count = 0
with open(file_path, 'r', encoding='utf8') as f:
  for line in f:
    count += 1

print(count)
Run Code Online (Sandbox Code Playgroud)

这两个计数是 2122 和 2120。它们不应该是相同的吗?

jua*_*aga 7

因此,查看 的文档str.splitlines,我们发现此方法的行分隔符是“通用换行符”的超集:

此方法在以下行边界上进行分割。特别是,边界是通用换行符的超集。

表示 描述
\n 换行
\r 回车
\r\n 回车+换行
\v或者\x0b 线制表
\f或者\x0c 换页
\x1c 文件分隔符
\x1d 组分隔符
\x1e 记录分隔符
\x85 下一行(C1 控制代码)
\u2028 行分隔符
\u2029 段落分隔符

默认情况下,文本文件的一行将使用通用换行符方法来解释分隔符,来自文档

当从流中读取输入时,如果newlineNone,则启用通用换行符模式。输入中的行可以以'\n''\r'或 结尾'\r\n',这些行在'\n'返回给调用者之前会被转换为。如果换行符为'',则启用通用换行符模式,但行结尾会以未翻译的形式返回给调用者。如果换行符具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾会以未翻译的形式返回给调用者。