为什么grep会看到Python无法看到的内容('\ r \ n')?

时间:2017-11-28 16:13:52

标签: python grep binary line-breaks

我执行以下命令

grep $'\r\n' tmp.txt | wc -l

结果我得到了:

1000

因此,我得出结论,我的文件包含1000行包含\r\n的行。现在我尝试在Python中做同样的事情:

out = []
finp = 'tmp.txt'
i = 0
for line in open(finp, 'rb').readlines():
    if line[-2:] == '\r\n':
    #if '\r\n' in line:
        out.append(1)
    else:
        out.append(0)
print(sum(out))

我得到0作为结果。我在Python中所做的并不完全相同,因为我没有检查一行包含 \r\n。而不是我用\r\n检查它是否结束。但是,我不认为这是差异的原因(因为我认为在我的情况下,行以\r\n结束。)

所以,我的问题是如何检查该行是否包含\r\n组合。您可能已经注意到我尝试运行if '\r\n' in line但它会导致错误:

TypeError: a bytes-like object is required, not 'str'

其次,我不确定它会有所帮助。我是否需要做更多的事情以确保Python“看到”grep看到的内容?

1 个答案:

答案 0 :(得分:1)

检查行中\r\n是否正确的正确方法是使用

if b'\r\n' in line

通过这种方式,Python生成的行数与grep相同。