[Python] File I/O

1 minute read

python-version-3.7.1

File I/O (파일 입출력)

  • Python에서 파일을 생성 및 불러올 수 있다.

  • 불러온 파일을 읽기, 쓰기, 내용추가 등의 작업을 할 수 있다.



open()

Python 에서 파일을 생성 및 불러오기 위해서 open 함수를 사용한다.

  • Form : open('<FilePath>', '<Mode>')
Mode Description
r Read (읽기)
w Write (쓰기)
a Append (추가)


위의 파일모드 뒤에 추가적으로 파일모드를 명시할 수 있다.

  • t : Text 파일 (Default)

  • b : Binary 파일

ex) 'rb' : 바이너리 파일을 읽는 모드



f = open('./tmp/example.txt', 'r')

'r' 뒤에 추가적인 명시가 없으므로 text 파일읽기가 된다. (= 'rt')

위와 같이 작성했다면 현재 파이썬 에디터가 열린 디렉토리에서 tmp 폴더로 진입하여
example.txt 파일을 읽기모드로 불러오는 것이다.

  • 'r' (읽기모드) : 파일을 읽는 것만 가능하며, 수정이 불가능하다.
  • 'w' (쓰기모드) : 해당 경로에 파일이 생성된다. (이미 존재하는 파일이었다면 새로운 비어있는 파일로 덮어씌운다.)

open 함수로 불러온 파일에 대한 작업이 끝났다면 close 메서드를 통해 파일 객체를 닫아준다.

f.close()


아래에는 파일모드와 그와 관련된 메서드를 정리하였다.
example.txt 의 내용은 아래와 같다고 가정하고 작성하였다.

Learning python is fun.
Second line.
third line.
The last line.



읽기모드 (r)

f = open('./tmp/example.txt', 'r')


read()

파일의 내용 전체를 문자열로 반환한다.

f.read()

>>> 'Learning python is fun.\nSecond line.\nThird line.\nThe last line.\n'


readline()

파일을 한 줄씩 읽어 반환한다. 더 이상 내용이없다면 None을 반환한다.

f.readline()

>>> 'Learning python is fun.\n'


readlines()

파일의 모든 내용을 읽어서 각각 한 줄씩을 요소로 갖는 리스트를 반환한다.

f.readlines()

>>> ['Learning python is fun.\n', 'Second line.\n', 'Third line.\n', 'The last line.\n']

만약 파일을 열 때 모드가 'r' 이 아닌, 'w' 또는 'a' 라면 위의 함수들을 사용할 수 없다.



쓰기모드 (w), 추가모드 (a)

  • 'w' 모드로 파일을 열었을 경우, 새로 만드는 것과 같다.

    기존에 내용이 있던 파일을 'w' 모드로 열었을 경우, 이전 내용이 모두 지워진다는 점을 주의해야한다.

  • 'a' 모드로 파일을 열었을 경우, 기존파일에서 내용을 추가할 수 있다.



f = open('./tmp/example.txt', 'w')



write()

contetns 에 해당하는 텍스트를 파일에 작성한다.

f.write('Writing first line')

f.close()

위의 내용이 쓰였는지 직접 파일을 열어서 확인해볼수도 있다.
또는 아래 코드를 통해서 확인해볼 수도 있다.

f = open('./tmp/example.txt', 'r')

f.read()

>>> 'writing first line'



with

Form

with open('<FilePath>', '<Mode>') as <Variable>:
    # Some Code

파일을 사용 후, f.close 를 쓰는 것이 번거로울 수 있다.
이 과정을 자동으로 처리해주는 명령어다.

f = open('./tmp/example.txt', 'w')
f.write('I don't want to use f.close')
f.close()

위의 코드를 with문을 활용하면 다음과 같이 된다.

with open('./tmp/example.txt', 'w') as f:
    f.write('I don't want to use f.close')

with가 사용된 블럭을 벗어나면 자동으로 f.close() 와 같은 처리를 해준다.

Leave a comment