> 백엔드 개발 > 파이썬 튜토리얼 > 파일 열기 방법을 지정하기 위해 Python에서 open() 함수를 사용하는 방법에 대한 자세한 설명

파일 열기 방법을 지정하기 위해 Python에서 open() 함수를 사용하는 방법에 대한 자세한 설명

大家讲道理
풀어 주다: 2016-11-07 10:56:07
원래의
1500명이 탐색했습니다.

open() 함수를 사용하여 파일을 열 때 여러 가지 열기 모드가 있습니다.

'r'->읽기 전용

'w'->쓰기 전용, 파일이 이미 있으면 지우고, 없으면 새로 만듭니다.

'a'->추가, 파일 끝에 쓰기

'b'->이미지, 오디오, 워드 파일 열기 등 바이너리 모드.

'+'->업데이트(읽기 및 쓰기 가능)

'+' 기호가 있는 부분은 조금 이해하기 어렵습니다. 코드로 가서 느껴보시기 바랍니다.

open('foo.txt', 'w+')을 f로 사용:

f.write('barn')

f.seek(0)

data = f.read()

보시다시피 위 코드는 쓰기 뿐만 아니라 읽기도 가능합니다. 먼저 시작 부분인 f.seek(0)을 찾아야 합니다. 그렇지 않으면 빈 데이터를 읽게 됩니다.

'+' 기호는 읽고 쓸 수 있기 때문에 'w+'와 'r+'의 차이점이 무엇인지 혼동하시는 분들이 있을 수 있습니다.

즉,

'w+'는 삭제하고 생성합니다(파일이 이미 있으면 삭제하고, 없으면 생성됩니다.)

'r+ '는 지워지지 않고 생성되지 않습니다.

바이너리 모드에서 텍스트 파일을 열지 마세요

먼저 아래 코드의 "이상한" 현상을 살펴보세요.

Windows에 다음 내용이 포함된 f.txt 파일이 있다고 가정합니다.

hello
world
로그인 후 복사

코드 1,

with open('f.txt', 'r') as f: 
    print f.readlines() 
with open('f.txt', 'rb') as f: 
    print f.readlines()
로그인 후 복사

출력

['hello\n', 'world\n']
['hello\r\n', 'world\r\n']
로그인 후 복사

코드 2,

with open('f.txt', 'rb') as f: 
    data = f.read() 
with open('f.txt', 'w') as f: 
    f.write(data)
로그인 후 복사

파일을 열면 다음과 같이

hello^M
world^M
로그인 후 복사

먼저 줄 바꿈 문자 'n'과 캐리지 리턴 문자 'r'의 개념을 이해합니다.

'n', 줄 바꿈 문자(LF, Line-Feed)는 새 줄을 나타냅니다.

'r', 캐리지 리턴(CR, Carriage-Return)은 줄의 처음으로 돌아가는 것을 의미합니다.

시스템마다 줄 바꿈 플래그가 다르기 때문입니다.

windows->'\r\n'
unix->'\n'
mac->'\r'
로그인 후 복사

이것이 Windows에서 txt를 Linux에서 열 때 줄 끝에 '^M'이 있는 이유입니다.

그래서 Linux에서 스크립트를 실행하여 게임 데이터를 내보내고 로컬 창에서 열었더니 한 줄로 바뀌었습니다.

사실 텍스트 파일도 바이너리 파일인데, 이는 텍스트로 인코딩된 바이너리 파일입니다. 텍스트 파일은 가독성을 높이기 위해 보이지 않는 일부 문자를 처리합니다.

파이썬에서는 os.linesep을 통해 현재 시스템의 개행 식별자를 얻을 수 있습니다. 예를 들어 Windows에서는 os.linesep이 'rn'입니다.

위의 이론적 근거를 바탕으로 이 글의 시작 부분에서 코드의 "이상한" 현상을 분석할 수 있습니다.

코드 1에서 텍스트 모드로 열린 파일의 개행 플래그는 Python에서 'n'으로 처리되지만 바이너리 모드로 열 때는 그대로 유지됩니다.

코드 2에서는 바이너리 모드로 열고 텍스트 모드로 작성합니다. 바이너리로 열면 여전히 'rn'이고 텍스트 모드로 쓸 때 Python은 'n'을 'rn'으로 변환하므로 실제로 'rrn'을 쓰는 것과 동일하므로 추가 '^M'이 있습니다. .

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿