파일과 운영체제
- 파이썬에서 파일을 다룰 때는 내장 함수인
open
을 이용하여 파일의 상대 경로나 절대 경로를 넘겨주어야 함
- 기본적으로 파일은 읽기 전용 모드인 'r'로 열림
- 파일 핸들 f를 리스트로 생각할 수 있고, 파일의 매 줄을 순회할 수 있음
- 파일에서 읽은 줄은 줄끝(EOL) 문자가 그대로 남아 있음
- 따라서 이를 제거하는 코드를 종종 볼 수 있음
- ex)
x.rstrip()
- 파일 객체를 생성하기 위해
open
을 사용했다면, 작업이 끝났을 때는 close
를 이용하여 명시적으로 닫아 주어야 함
- 파일을 닫으면 해당 자원을 운영체제로 되돌려줌
with
문을 사용하면 파일 작업이 끝났을 때 필요한 작업을 쉽게 처리할 수 있음
with open(path) as f:
- 위와 같이 작성하면 with 블록이 끝나는 시점에서 파일 핸들 f를 자동으로 닫아 줌
- 만약 파일을
f = open(path, 'w')
로 연다면, 파일이 새롭게 생성되고 파일의 내용을 새로운 내용으로 덮어 쓰게 됨
- 'x' 모드는 쓰기 목적으로 파일을 새로 생성하지만, 이미 해당 파일이 존재한다면 실패함
- 파일을 읽을 때는 주로
read
, seek
, tell
메서드를 사용함
read
는 해당 파일에서 특성 개수만큼의 문자를 반환하고, 읽은 바이트만큼 파일 핸들의 위치를 옮김
seek
은 핸들의 위치를 지정한 바이트의 위치로 설정해 주는 메서드이고,
tell
은 현재 핸들의 위치를 알려 줌
★ 사용이 끝나면 항상 close()
를 이용하여 파일을 닫아 주어야 함
바이트와 유니코드
- 파이썬 파일은 파이썬 문자열을 다루기 위한 텍스트 모드를 기본으로 함
- 파일 모드에 'b'를 추가해 열 수 있는 이진 모드와 다름
- UTF-8은 가변길이 유니코드 인코딩이므로, 파일에서 일부 문자를 읽도록 한다면 파이썬은 파일에서 필요한 만큼의 바이트(10~40 bytes)를 읽고, 10문자로 디코딩함
- 파일을 'rb' 모드로 열었다면 read는 딱 10바이트만 읽어 올 것
- 텍스트 인코딩에 따라 읽어 온 바이트를 str 객체로 직접 디코딩할 수도 있음
- 온전한 유니코드 문자로 인코딩되어 있을 경우에만 가능
open
메서드에 encoding 옵션을 지정한 텍스트 모드에서는 유니코드 인코딩을 다른 인코딩으로 쉽게 변경할 수 있는 방법을 제공함
- 이진 모드가 아닐 경우에는 열려진 파일에 대해
seek
메서드를 호출할 때 주의해야 함
- 파일 위치를 유니코드 문자를 정의하는 바이트 사이로 지정한다면 뒤이은 읽기에서 에러가 발생함