본문 바로가기

컴퓨터프로그래밍

File

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
  • 현재 수행되고 있는 working directory를 확인하는 코드
    • import os
      print(os.getcwd())

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과 달리, bytesbytearray를 사용한다.

  • 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
  • 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