2017-11-28 17 views
-1

나는 다음 명령을왜 grep이 파이썬이 볼 수없는 것을 볼 수 있습니까 (' r n')?

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

을 실행하고 그 결과로 내가 얻을 :

1000 

그래서, 내 파일이 \r\n을 포함 1,000 선을 포함 결론 지었다.

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을 얻을 : 지금은 파이썬에서 동일한 작업을 수행하려고합니다. 파이썬에서 내가하는 일은 똑같은 것은 아니다. 왜냐하면 내가 줄을 검사하지 않기 때문이다. 에는\r\n이 포함되어있다. 그 대신에 \r\n으로 끝나는 지 확인합니다. 그러나, 나는 그것이 차이의 이유라고 생각하지 않는다. (내 경우 에선이 \r\n으로 끝난다.

그래서 내 질문은 라인에 \r\n 조합이 포함되어 있는지 확인하는 방법입니다. 당신이 알다시피 나는 if '\r\n' in line를 실행하려고하지만 오류가 발생합니다 :

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

둘째, 나는 그것이 도움이 될 것이라고 확신하지 않는다. 파이썬이 grep이 보는 것을 "보기"위해 더 많은 것을해야합니까?

+2

파일이 바이트 모드로 열리는 이유는 무엇입니까? 바이트 객체를 문자열과 비교하고 있습니다. –

+0

이것이 제가 바이트 모드에서 열리는 이유입니다 : https://stackoverflow.com/questions/13953639/check-carriage-return-is-there-in-a-given-string – Roman

+0

그런 다음'b '\ r \ 대신에. –

답변

1

\r\n는 광고에 있는지 확인하는 정확한 방법 파이썬 그렙으로 선과 동일한 수의 제조 방법이

if b'\r\n' in line 

을 사용하는 것이다.