【问题标题】:wc -l and python line count differwc -l 和 python 行数不同
【发布时间】:2019-06-26 22:56:34
【问题描述】:

我想知道为什么对于here (train_en.txt) 和 here (@987654328) 给出的文件,使用 bash 进行简单的行数计算给我的行数与使用 python(3.6 版)计算的行数不同@)。在 bash 中,我使用的是命令:

wc -l train_en.txt
wc -l train_de.txt

输出分别为 4520620 和 4520620。

在 python 中,我使用的是命令:

print(sum(1 for line in open('train_en.txt')))
print(sum(1 for line in open('train_de.txt')))

输出分别为 4521327 和 4521186。

当我使用 python 命令时

len(open('train_en.txt').read().splitlines())
len(open('train_de.txt').read().splitlines())

我分别得到 4521334 和 4521186(train_en.txt 结果与前面的 python 命令不匹配)。

作为参考,这些是通过连接来自WMT '14 English to German translation taskCommon CrawlEuroparlNews Commentary 数据集(按此顺序)生成的并行文本语料库,并且应该具有相同的行数。

【问题讨论】:

  • 使用哪些区域设置?使用 LC_ALL=C 导出的运行是否会修改行为?
  • 红帽企业 Linux 服务器,版本 7.6,fedora
  • locale 命令的输出是什么?
  • 这会在 Python 3.6 中为我抛出 UnicodeDecodeError
  • @CharlesDuffy,对不起,locale 的输出是:LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US .UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=

标签: python bash count line wc


【解决方案1】:

\ns 可以被视为多字节字符,而不是实际的\n。可以通过使用字节串编码来避免这种情况。命令

print(sum(1 for line in open('train_en.txt', mode='rb')))
print(sum(1 for line in open('train_de.txt', mode='rb')))
len(open('train_en.txt', mode='rb').read().splitlines())
len(open('train_de.txt', mode='rb').read().splitlines())

所有结果都为 4520620(与 wc -l 的输出匹配),这意味着英语和德语语料库是平行的。

感谢@CharlesDuffy 的帮助。

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 2015-03-30
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多