복붙노트

[PYTHON] r 및 rb 모드에서 텍스트 파일 구문 분석의 차이점

PYTHON

r 및 rb 모드에서 텍스트 파일 구문 분석의 차이점

'r'모드에서 텍스트 파일을 구문 분석하는 것이 'rb'모드에서 구문 분석하는 것보다 더 편리합니까? 특히 문제의 텍스트 파일에 비 ASCII 문자가 포함되어있을 수 있습니다.

해결법

  1. ==============================

    1.이것은 사용하는 Python의 버전에 따라 조금씩 다릅니다. Python 2에서 Chris Drappier의 대답이 적용됩니다.

    이것은 사용하는 Python의 버전에 따라 조금씩 다릅니다. Python 2에서 Chris Drappier의 대답이 적용됩니다.

    파이썬 3에서는 텍스트 모드 ( 'r')에서 파이썬은 텍스트 인코딩에 따라 파일을 구문 분석합니다 (또는 사용자가 제공하지 않으면 플랫폼 기반의 파일 형식으로 파일을 구문 분석합니다. 의존적 인 기본값), 그리고 read ()는 str을 줄 것이다. 바이너리 ( 'rb') 모드에서 파이썬은 파일에 합리적으로 문자로 파싱 할 수있는 것들을 포함한다고 가정하지 않으며, read ()는 바이트 객체를 제공합니다.

    또한 파이썬 3에서는 보편적 인 개행 문자 ( '\ n'과 플랫폼 고유의 개행 규칙을 번역 할 필요가 없으므로 이들을 신경 쓸 필요가 없다)는 Windows가 아닌 모든 플랫폼에서 텍스트 모드 파일을 사용할 수있다.

  2. ==============================

    2.문서에서 :

    문서에서 :

  3. ==============================

    3.차이점은 EOL (end-of-line) 처리 방법에 있습니다. 다른 운영 체제는 Unix에서는 EOL - \ n, OS X 이전 Mac 버전에서는 \ r, Windows에서는 \ r \ n을 표시하는 데 다른 문자를 사용합니다. 텍스트 모드에서 파일을 열면 파일을 읽을 때 Python은 파일에서 읽은 OS 특정 줄 끝 문자를 \ n으로 바꿉니다. 그 반대의 경우도 마찬가지입니다. 예를 들어 텍스트 모드로 열린 파일에 \ n을 쓰려고하면 OS 고유의 EOL 문자를 씁니다. os.linesep를 검사하여 OS 기본 EOL을 찾을 수 있습니다.

    차이점은 EOL (end-of-line) 처리 방법에 있습니다. 다른 운영 체제는 Unix에서는 EOL - \ n, OS X 이전 Mac 버전에서는 \ r, Windows에서는 \ r \ n을 표시하는 데 다른 문자를 사용합니다. 텍스트 모드에서 파일을 열면 파일을 읽을 때 Python은 파일에서 읽은 OS 특정 줄 끝 문자를 \ n으로 바꿉니다. 그 반대의 경우도 마찬가지입니다. 예를 들어 텍스트 모드로 열린 파일에 \ n을 쓰려고하면 OS 고유의 EOL 문자를 씁니다. os.linesep를 검사하여 OS 기본 EOL을 찾을 수 있습니다.

    파일이 2 진 모드로 열리면 맵핑이 일어나지 않습니다. 당신이 읽는 것은 당신이 얻는 것입니다. 텍스트 모드가 기본 모드임을 기억하십시오. 따라서 텍스트가 아닌 파일 (이미지, 비디오 등)을 처리하는 경우 바이너리 모드로 파일을 열어야합니다. 그렇지 않으면 일부 바이트를 도입 (또는 제거)하여 파일을 망칠 것입니다.

    파이썬에는 보편적 인 개행 (newline) 모드가 있습니다. 이 모드에서 파일을 열면 Python은 모든 \ r, \ n 및 \ r \ n을 \ n에 매핑합니다.

  4. ==============================

    4.명확히하고 Agostino의 코멘트 / 질문에 대답하기 위해 (나는 대답하기에 충분하다고 언급 할 정도로 충분한 평판을 얻지 못했다 ...) :

    명확히하고 Agostino의 코멘트 / 질문에 대답하기 위해 (나는 대답하기에 충분하다고 언급 할 정도로 충분한 평판을 얻지 못했다 ...) :

    파이썬 2에서는 텍스트 나 바이너리 모드에서 선 부분 수정이 일어나지 않습니다. 파이썬 2에서 Chris Drappier의 답변이 적용됩니다. (현재 링크는 현재 3.x Python 문서를 가리키고 있지만 Chris의 인용 텍스트는 물론 Python 2 입출력 자습서에서)

    아니요, Windows가 아닌 환경에서 Python 2를 사용하여 텍스트 모드로 파일을 여는 것은 라인 끝 수정을 수행한다는 것은 사실이 아닙니다.

    0 $ cat data.txt 
    line1
    line2
    line3
    0 $ file data.txt 
    data.txt: ASCII text, with CRLF line terminators
    0 $ python2.7 -c 'f = open("data.txt"); print f.readlines()'
    ['line1\r\n', 'line2\r\n', 'line3\r\n']
    0 $ python2.7 -c 'f = open("data.txt", "r"); print f.readlines()'
    ['line1\r\n', 'line2\r\n', 'line3\r\n']
    0 $ python2.7 -c 'f = open("data.txt", "rb"); print f.readlines()'
    

    그러나 파이썬 2에서 파일을 보편적 인 개행 모드로 열 수 있습니다. 파이썬 2에서는 라인 끝 모드를 정확하게 수행합니다 :

    0 $ python2.7 -c 'f = open("data.txt", "rU"); print f.readlines()'
    ['line1\n', 'line2\n', 'line3\n']
    

    (유니버설 개행 모드 지정자는 Python 3.x에서 더 이상 사용되지 않습니다)

    반면에 파이썬 3에서는 텍스트 모드에서 파일을 읽을 때 플랫폼 별 라인 끝이 '\ n'으로 정규화되고 텍스트 모드로 쓰이면 '\ n'이 현재 플랫폼의 기본 줄 끝으로 변환됩니다 ( 텍스트 모드에서 계속되는 바이트 <-> 유니 코드 <-> 바이트 디코딩 / 인코딩). 예 : 리눅스에서 Dos / Win CRLF 라인으로 끝나는 파일을 읽는 것은 라인 끝을 '\ n'으로 정규화 할 것입니다.

  5. from https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode by cc-by-sa and MIT license