file을 처리하기 위해 가장 먼저 수행되는 작업: file open
- file open
- file을 memory로 읽어들이고, file의 content등에 접근할 수 있는 기능이 구현된 object을 얻는 것
- 이 후 해당 object이 제공하는 여러 file관련 operator를 통해 읽기, 쓰기 등이 이루어짐.
파일을 열어서 해당 file에 대한 처리가 끝나고 나면 반드시 open을 통해 얻은 object을 이용하여 파일을 닫아주어야 한다.
- file close
- 해당 file관련하여 os가 제공해준 resource를 반환하는 것
- python은 더이상 참조되지 않는 경우 자동으로 close가 이루어진다.
file open
fin=open('file_path', 'wt')
- file_path: open하려고 하는 파일의 path. absolute path 또는 relative path를 문자열 argument로 지정해줌.
- wt: mode라고 불리며, file을 어떤 작업이 가능하도록 열지를 지정하는 문자열.
path
- cwd(current working directory)-현재 수행을 하기 위해 들어와 있는 directory
- relative path(상대경로): cwd를 기준으로 (상대적인)파일 경로를 지정함.
- absolute path(절대 경로): 현 작업 directory(cwd)와 관계없는 절대적인 위치
- windows
- 드라이브:\폴더\폴더\파일명
c:\Windows\system\code_file
- 드라이브:\폴더\폴더\파일명
- linux
- /디렉토리/디렉토리/파일명
- /home/danbe58/.bashrc
- windows
- 현재 수행되고 있는 working directory를 확인하는 코드
- import os
print(os.getcwd())
- import os
mode argument
mode는 하나 또는 두개의 character로 이루어짐.
첫 번째 character는 열고자 하는 file에 대해 어떤 작업을 가능하게 할지를 지정함.
- r: 'read' 읽기모드 (read method)
- w: 'write' 쓰기모드 (기본 파일이 있을 경우, 기존 파일이 삭제되고 새로 쓰여짐. 파일이 존재하지 않으면 새로운 파일이 생성됨.)
- a:'append' 뒤에 추가하는 모드로 파일을 엶.(write mode)(기존 파일 내용은 그대로 유지하며, 새로운 내용이 파일 끝에 추가됨. 파일이 존재하지 않으면, 새로운 파일이 생성됨.)
- x: write모드이나 반드시 새로 만드는 파일이어야 함. 이미 존재하는 파일인 경유 오류가 발생함.
두 번째 character는 열고자 하는 file의 종류를 지정한다.
- t: 기본값. file을 text 파일이라고 생각하고 open. t 생략가능.
- b: file을 binary file이라고 생각하고 open. 기본적으로 text file로 열게 되어있기 때문에 binary file을 열 때는 b를 추가해줘야함.
file 닫기
fin=open('file_path', 'wt')
#fin에 내용을 쓰는 처리 등등.
fin.close() #file닫기
context manager: with statement
contexte manager는 원하는 특정 구간에서 resource를 얻고 반환하는 것을 관리해준다.
- with statement로 시작하는 code block으로 들어갈 경우
- 정해진 resource를 얻는 처리가 자동으로 수행됨.
- 해당 block을 나갈 때
- 자동으로 해당 resource를 반환하는 처리가 수행됨.
ex)
# 'example.bin' 파일이 존재하지 않으면 새로 생성되고, 존재하면 내용이 추가됨.
with open('example.bin', 'ab') as file:
file.write(b'\x04\x05\x06\x07')
file=open('example.bin','ab')
file.write(b'\x04\x05\x06\x07')
fin.close()
Text File
쓰기
print()는 한 line을 출력하는 것을 기본 동작으로 함.
write() 메서드
- text mode에서는 file에 쓴 character(글자)수를 반환함.
- binary mode에서는 file에 쓴 byte 수를 반환함.
읽기
- read: 통으로 한 번에 읽어들이거나 정해진 글자수만큼 읽어들이고, 읽어들인 문자열을 반환.
- readline: 한 line을 읽어들이고 해당 line에 해당하는 문자열을 반환.
- 읽어들인 line에 newline으로 끝날 경우, 반환된 문자열도 newline을 끝에 가지고 있음.
- readlines: 한 번에 여러 라인들을 읽어들여 각 line을 item으로 가지는 list를 반환.
read() method
argument가 없을 경우, 파일 전체를 읽어들임.
int로 argument를 줄 경우 해당 숫자의 글자를 읽어들임.
file의 끝에 도달하여 더이상 읽을 문자가 없을 경우, 빈 문자열을 반환함.
Binary File
파일 내용을 담는데 str을 주로 사용하는 txt file과 달리, bytes와 bytearray를 사용한다.
- byte: immutable
- bytearray: mutable
쓰기
write() method
쓰여진 byte수를 반환한다.
읽기
read() method
- text mode로 file을 여는 경우
- 사람이 읽을 수 있는 문자들로 구성된 file.
- file의 bytes 값들을 사람이 읽을 수 있는 문자로 표시하기 위해 encoding 방식에 따라 bytes를 처리함.
- encoding 방식에서 지정되지 않은 값을 가지는 bytes가 있을 경우
- UnicodeDecodeError가 발생하여 file을 열 수 없음.
- errors='ignore'로 지정하여 open할 경우 해당 bytes를 무시할 수 있음.
- 읽어들인 데이터 type: str
- encoding 방식에서 지정되지 않은 값을 가지는 bytes가 있을 경우
- binary mode로 file을 여는 경우
- 순수한 bytes의 형태로 취급함.
- 어떠한 변환없이 file에 기재된 bytes 값 그대로 읽어들임.
- 읽어들인 데이터 type: bytes
*open으로 반환되는 file에 대한 객체는 그 자체로 iterator이다.
'컴퓨터프로그래밍' 카테고리의 다른 글
| Path module (2) | 2024.06.03 |
|---|---|
| OS Module (3) | 2024.06.03 |
| Iterator, Generator (0) | 2024.06.01 |
| Comprehension (0) | 2024.05.31 |
| set, dictionary (0) | 2024.05.29 |