为什么Python两种文本加载方式统计得到的行数结果不一致
两种Python文本行数统计方式结果差异的原因
- 编码参数缺失导致的读取差异
第一种实现调用pathlib.Path.read_text()时没有显式传入encoding='utf-8'参数,Python会自动使用系统默认编码读取文件。即便不会触发解码报错,不同编码对换行相关特殊字符的解析逻辑也可能存在差异,导致splitlines()拆分出多余的行。你可以先修改第一部分代码,显式指定编码后复测:
vocab = pathlib.Path(file_path).read_text(encoding='utf-8').splitlines()
如果修改后两种统计结果一致,即可确认是编码未指定导致的问题。
- 行分隔符识别规则不同
str.splitlines()的拆分规则覆盖的分隔符范围远大于文件对象逐行迭代的规则:splitlines()会把\n、\r\n、\r、\f(换页符)、\v(垂直制表符)、Unicode行分隔符(U+2028)、Unicode段分隔符(U+2029)等十多种字符都作为行分隔符拆分for line in f的逐行迭代默认仅识别\n、\r\n、\r三种ASCII换行符作为行分隔符
如果你的文件中包含splitlines()额外支持的分隔符,就会出现拆分行数更多的情况。你可以对比两个行列表的具体内容,定位多出来的2行,即可确认对应的分隔符类型。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

