Python에서 open() 함수를 사용하여 파일 열기 방법을 지정하는 방법

高洛峰
풀어 주다: 2017-03-03 15:19:48
원래의
1991명이 탐색했습니다.

파일 열기 방법

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 파일이 있다고 가정합니다.

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']
로그인 후 복사

Code 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'의 개념을 이해하세요.
줄 바꿈 문자(LF, Line-Feed)인 'n'은 새 줄을 나타냅니다.
'r', 캐리지 리턴(CR, Carriage-Return)은 줄의 처음으로 돌아가는 것을 의미합니다.

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

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

이것이 Windows에서 txt를 Linux에서 열 때 줄 끝에 '^M'이 있는 이유입니다.
그래서 Linux에서 게임 데이터를 내보내는 스크립트를 실행하고 로컬 창에서 열었더니 한 줄로 바뀌었습니다.

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

파이썬에서는 os.linesep을 통해 현재 시스템의 개행 식별자를 얻을 수 있습니다. 예를 들어 Windows에서는 os.linesep이 'rn'입니다.
Python에서 개행 플래그를 작동할 때 어떤 플랫폼에 있든 상관없이 'n'만 사용하면 됩니다. Python은 자동으로 이를 다른 시스템에 따라 다른 플래그로 변환합니다.

위의 이론적 근거를 바탕으로 이 글의 시작 부분에서 코드의 "이상한" 현상을 분석할 수 있습니다.
코드 1에서 텍스트 모드로 열린 파일의 경우 개행 플래그는 Python에 의해 'n'으로 처리되지만 바이너리 모드로 열면 그대로 유지됩니다.
코드 2에서는 바이너리 모드로 열고 텍스트 모드로 작성합니다. 바이너리로 열면 여전히 'rn'이고 텍스트 모드로 쓸 때 Python은 'n'을 'rn'으로 변환하므로 실제로 'rrn'을 쓰는 것과 동일하므로 추가 '^M'이 있습니다. .

파일 열기 방법을 지정하기 위해 Python에서 open() 함수를 사용하는 방법에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!

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