파이썬 파일 입출력

박은정·2021년 7월 20일
0

폴더 이동하기와 더불어서 파일의 입출력이 중요한 이유

파이썬으로 작업한 결과물을 눈으로 곧바로 확인이 가능하다
처음 프로그래밍을 배울 때 만드는 파일 : txt csv 파일

일반 컴퓨터에서는 파일 내용을 확인하려면 파일을 더블 클릭하기만 하면 되는데
이는 특정 폴더에서 특정 파일을 특정한 목적으로 불러오는 여러 단계의 과정이 포함되어 있다.

파일 열기 open() 함수

파일 객체 = open('파일 이름', '파일 열기 모드')

open() 함수 예시

a.txt 라는 새 파일을 '쓰기'모드로 생성하기

>>> f = open('a.txt', 'w')

f 객체 이름 지정하는 이유

그냥 open() 함수로 파일을 열면 될 것 같은데 f라는 객체(다른 이름도 가능)에 왜 넣을까?
특정 객체 이름을 지정하지 않고 그냥 open() 함수 로 명령을 내려도 파일은 열린다

파일 작업을 할 때에는 폴더를 같이 띄어 놓고 파일이 있는지 없는지를 수시로 확인하면 좋다

oprn('a.txt', 'w')를 실행하면 현재 위치한 폴더에 a.txt 파일이 생성된 것을 확인할 수 있다
이 상태에서 a.txt 파일에 또 다른 명령어를 넣으려면
open('a.txt', 'w').write('abc') 와 같이 복잡한 코드를 만들어야 되는데

# a.txt 파일에 abc라는 문자열을 쓴다
>>> open('a.txt', 'w').write('abc')

# 3 : 입력한 문자의 개수가 출력된다

앞으로 a.txt 파일을 사용해 여러 작업을 할 때마다 긴 명령어로 파일을 여는 것을 불편하므로
f와 같이 간단한 이름의 객체에 파일을 여는 명령을 미리 저장하고 사용하는 것이다

파일 열기 모드

파일 열기 모드의미
w파일에 내용을 새로 쓸 때 사용한다
r파일 내용을 읽을 때 사용한다
a파일에 내용을 추가할 때 사용한다

파일 쓰기 vs 읽기

쓴다 : 파일을 새로 만들어서 쓴다
읽다 : '이미 그 파일이 있다'는 것을 전제로 한다
그러므로 해당 경로에 있는 파일 이름을 정확하게 입력해야 명령어가 작동되며
파일 이름을 잘못 입력하면 오류가 발생한다

1. 파일 쓰기 모드 w

가장 간단하게 글을 쓰는 방법은 write() 함수 사용
이미 a.txt 파일을 쓰기(w)모드로 열어서 f라는 객체에 지정했으므로
f에 바로 명령어를 입력해주면 아무 글이나 쓸 수 있다

>>> f = open('a.txt', 'w')
>>> f = write('나는 오늘 학교에 갔다.')
13  # 정상적으로 입력됨, 입력한 문자의 개수
>>> f.close()  # 파일 닫기를 꼭 해줘야 한다

2. 파일 읽기 모드 r

  1. 읽기 모드일 때 내릴 수 있는 여러 명령 중 파일 내용을 읽어주는 read() 함수 사용
>>> f = open('a.txt', 'r')
>>> f.read()
'나는 오늘 학교에 갔다.'
>>> f.read()
``
  1. f.read() 한 번 vs 두 번
    처음 f.read() 를 입력하면 '나는 오늘 학교에 갔다.' 라는 내용이 나오지만
    두 번째로 f.read()를 했을 때에는
    커서 위치가 파일의 가장 끝에 있어서 더 이상 읽을 내용이 없어서 빈 문자열로 나온다

커서의 위치 찾기 seek() 사용
예) 문서의 가장 처음으로 가고 싶다면 f.seek(0) 명령

>>> f.seek(0)
0
>>> f.read()
'나는 오늘 학교에 갔다.'
>>> f.close()
  1. 실행 폴더에 없는 파일을 읽기 모드로 열려고 하면 오류가 발생한다
>>> f = open('b.txt', 'r')
Tracback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    f = open('b.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'b.txt'
  1. f.read() 로 읽는 내용은 문자열 str 형태로 저장된다 (리턴된다)
    f.read() 를 통해 읽은 내용을 다른 객체에 저장한다면 문자열을 가공할 때 쓰는 모든 기능을 편리하게 활용 가능
>>> f= open('a.txt', 'r') #  a.txt 파일을 읽기 모드로 열기
>>> diary = f.read() # f.read() 결과값을 diary로 저장

>>> print(diary) # 저장된 값이 문자열이라 출력 가능함
나는 오늘 학교에 갔다

>>> print(diary[:5]) # 내용의 일부만 슬라이싱을 해서 출력할 수도 있다
나는 오늘

>> f.close() # 파일을 다 쓴 후 닫아준다

3. 파일 내용 추가모드 a

모든 파일을 읽기와 쓰기로 불러내고 출력하는 것이 가능하니,
추가는 굳이 필요할까 싶을텐데
간편하게 파일 맨 마지막에 우리가 원하는 내용을 쉽게 추가할 때는 추가모드를 사용하는 것이 편리하다

>>> f = open('a.txt', 'a')
>>> f.write(' 학교에 가지 않을 날이 올까?')
16
>>> f.close()
>>> f = open('a.txt', 'r')
>>> f.read()
'나는 오늘 학교에 갔다. 학교에 가지 않을 날이 올까?'
>>> f.close()

파일 닫기

파일을 열었다면 파일을 다시 꼭 닫아야 한다
1. 파일을 닫지 않은 상태에서 연습했던 파일을 지우려고 시도하면 파일을 지울 수 없다는 메시지가 뜬다
2. 닫지 않은 상태에서 읽기 모드로 다시 여는 등 다른 작업을 하려고 하면 오류가 발생한다
3. 정상적으로 파일이 닫히면 >>> 만 다시 나타난다

>>> f = open('a.txt', 'w')
>>> f.close()
>>>
profile
새로운 것을 도전하고 노력한다

0개의 댓글