• 2020. 7. 4.

    by. 윈썸지니

    반응형

    출처 : pixabay

    이번 포스팅은 프로그램을 개발하다 보면 아주 많이 사용하는 파일 처리에 대해 알아봅니다.

    어떤 텍스트 파일을 열어서 읽거나 쓰기를 하는 프로그램을 개발한다고 가정합니다.

     

    처리 순서는 파일 열기( open ) -> 읽거나 쓰기 ( read 또는 write) -> 닫기 ( close) 순서로 작성해야 합니다.

    파일을 열었으면 꼭 close를 해야 합니다.

     

    그렇지 않으면 기껏 파일에 write 한 문장들이 날아 갈수 있습니다.

    또한 계속 프로그램을 실행하면 파일 오픈 개수가 너무 많아져서 시스템에 영향을 줄 수 있습니다.

     

    close() 잊지 마세요.

     

    ◆ 파일 열기

     

    파일 열기는 내장함수인 open() 을 사용합니다.

    간단한 예제는 아래와 같습니다.

    먼저 메모장으로 file_test.txt 라는 파일을 만들어서 아래와 같이 문장을 입력하고 저장하였습니다.

    Hello World!
    I am Python
    I like python

     

    아래 예제는  간단하게 파일을 열고 그냥 닫았습니다.

    open 함수의 필수 옵션은 파일 경로입니다.

     

    f = open( ‘c:/py_test/file_test.txt’ )

    f.close()

    위의  예는 메모장으로 미리 텍스트 파일을 만들고 파일을 open 하였습니다.

    그럼 없는 파일을 한번 인자로 넣어 봅니다.

    파일을 찾을 수 없다고 오류가 발생합니다.

    >>> f = open( 'c:/aaa.txt' )

    Traceback (most recent call last):

      File "<pyshell#10>", line 1, in <module>

        f = open( 'c:/aaa.txt' )

    FileNotFoundError: [Errno 2] No such file or directory: 'c:/aaa.txt'

    >>>

    여기서 파일이 없으면 새로 생성할 수는 없을까? 라는 생각이 들 것입니다.

    이런 부분은 open() 함수에서 mode 라는 옵션을 사용하여 할 수 있습니다.

     

    mode 옵션은 디폴트 값이 rt 입니다. rt는 읽기 + 텍스트 의 뜻입니다.

    그럼 modeopen() 함수의 옵션값에 대해 알아봅니다.

     

    open 함수의 옵션들이며 아래 파라메타 값은 디폴트 값입니다.

     

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

     

    첫번째 인수 file경로만이 필수입니다.

    open() 함수 인자 설명입니다. 간단한  설명이니 더 자세한 내용은 파이썬에서 제공하는 매뉴얼을 참고하세요.

     

    file : 파일 경로

     

    mode : 파일이 열리는 모드

       r : 읽기 용으로 열림 (기본값)

       w : 쓰기 모드. 파일안에 내용이 있으면 덮어 씀(overwrite)

       x : 쓰기모드로 새로운 파일생성, 파일이 존재하면 오류 발생

       a : 쓰기모드, 파일의 끝에 추가(append)하는 경우 추가

       + : 읽기 및 쓰기를 위한  파일 열기

       b : 2진 모드(바이너리 모드)

       t : 텍스트 모드 (기본값)

      

    buffering : 버퍼링 정책입니다.

         0 : 버퍼링을 사용하지 않습니다. ( 바이너리 모드만 지원 )

         1 : 개행 문자를 만날때가지 라인 버퍼링을 수행 ( 텍스트 모드만 지원 )

         1 < :  버퍼링 값을 임의의 바이트 수 고정 크기로 직접 지정

        파일을 닫지 않으면 버퍼링되어 있는 데이터는 기록되지 않고 소실될 수 있습니다.

     

    encoding : 문자 인코딩 방식 (: 'utf-8', 'cp949’ )

         보통은 utf-8 을 사용합니다.

     

    errors = None,   # 선택적 매개변수, 텍스트 모드 시 에러 처리 (: 'ignore' 에러 무시)

         'strict' :  인코딩 에러 발생 시 ValueError 예외

         'ignore' : 에러 무시

         'replace' :  대체 기호 삽입

         'surrogateescape' :  U+DC80~U+DCFF 사이의 유니코드 사용자 자유 영역의 잘못된 바이트를 code points로 나타냄

         'xmlcharrefreplace' :  파일을 쓸 때 파일에 기록하려는 텍스트 안의 지정된 인코딩에서 지원되지 않는 문자를

                                      &#NNN; XML 문자 참조로 바꿔서 기록

         'backslashreplace' : 파일을 쓸 때 현재 인코딩에서 지원되지 않는 문자를 역슬래시(back slash, \)로 시작되는

                                    escape sequence로 바꿔서 기록

     

    newline : 파일을 읽고 쓸 때, 줄 바꿈 처리 ( None, '', '\n', '\r', '\r\n' 중 하나 입력)

          None으로 설정되어 있으면, '\n', '\r', '\r\n' 개행 문자로 간주

     

      closefd : True, False.  false는 파일이 닫혀도 오픈 상태를 유지

     

      opener :  파일을 여는 함수를 직접 구현 시 사용

     

    파일 열기에 대해 알아보았습니다. w, a, x 모드를 사용하면 새로운 파일을 생성도 합니다.

     

    다음 포스팅에서 open 을 하고 파일을 읽는 방법에 대해 다룹니다.

    다음 포스팅도 봐 주세요.

    반응형