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

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

高洛峰
高洛峰원래의
2016-10-17 11:45:581252검색

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

'r'->읽기 전용

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

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

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

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

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

with open('foo.txt', 'w+') as f: 
    f.write('bar\n') 
    f.seek(0)  
    data = f.read()

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

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

즉,

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

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

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

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

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

안녕하세요

world

코드 1,

with open('f.txt', 'r') as f: 
    print f.readlines() 
with open('f.txt', 'rb') as f: 
    print f.readlines()

출력

['hellon', 'worldn']

['hellorn', 'worldrn']

코드 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->'rn'

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'이 있습니다. .

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.