2017-11-28 11 views
-1

私は、次のコマンドをなぜgrepはPythonが見ることができないもの( ' r n')を見ていますか?

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

を実行し、その結果として、私が手:

1000 

だから、私は私のファイルが\r\nを含む1000行が含まれていることを結論付けています。

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を含む行をチェックしないので、私はPythonでやっていることは、まったく同じではありません。その代わりに、それは\r\nを終了した場合、私は確認してください。しかし、私は(私は私の場合にはラインが\r\nで終わると信じているので)、それは違いの理由であるとは思いません。

私の質問は、その行に\r\nの組み合わせが含まれているかどうかを確認する方法です。あなたが気づいたこととして、私はif '\r\n' in lineを実行しようが、それはエラーが発生します。

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

第二に、私はそれが役立つことを確認していません。 Pythonがgrepに見えるものを「見ている」ことを確かめるために何かを行う必要がありますか?

+2

はなぜファイルはバイトモードで開かれていますか?バイトオブジェクトと文字列を比較しています。 –

+0

これは私がバイトモードで開く理由です:https://stackoverflow.com/questions/13953639/check-carriage-return-is-there-in-a-given-string – Roman

+0

それから、 'b '\ r \代わりにn''。 –

答えて

1

\r\nが一致しているかどうかを確認するための正しい方法は、Pythonは、grepのような行の同じ数を作製このように

if b'\r\n' in line 

を使用することです。

関連する問題