▼2020년/파이썬 기초

[Python] 파이썬에서 파일 다루기

ITISIK 2020. 1. 28. 16:39
반응형

  파일을 읽고 쓰는데에는 여러가지 방법이 있다. 우선 '읽'고 '쓰'는 것이 무엇인지에 대해서 간단히 이야기 하고 아래 표를 통해서 파이썬에서의 파일 읽고 쓰기 모드에 대해서 알아보자.

  읽기란, 말 그대로 Read. 읽는 것으로 파일을 열어서 열람만 가능할 뿐, 별도의 수정(편집)이 불가능한 것을 말한다.
  쓰기란, 말 그대로 Write. 작성하는 것으로 파일을 여는 것은 물론, 수정(편집)할 수 있는 것을 말한다.

구 분

r

r+

w

w+

a

a+

읽기

읽기 및 쓰기

쓰기

읽기 및 쓰기

추가

읽기 및 추가

기존파일이 없는 경우

Error

새로 만듦

기존파일이 있는 경우

-

기존 내용의 앞부터 지우고

새로 쓰기됨

(INSERT키 누른 것처럼)

덮어쓰기 됨

(기존 내용 삭제)

기존 내용의 뒤부터

새로운 내용이 추가됨

  사실 이렇게 표로만 보면 무슨 말인지 이해가 어렵다. 실제 파일을 수정한 결과를 보면서 익혀보자.

 

파일 open 옵션 6가지(r, r+, w, w+, a, a+)

1. r

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r') 
f.read() 
f.write('r 모드라서 쓸 수가 없습니다.') 
f.close() 

 

 

2. r+

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r+') 
f.read() 
f.write('\nr+ 모드라서 쓸 수도 있어요.') 
f.close() 

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r+') 
f.read() 
f.close()

 

3. w

f = open('C:/Users/itisik/Documents/ITisik.txt', 'w') 
f.read() # w모드라서 읽기 불가능. 
f.write('w모드라서 쓸 수만 있고, 같은 이름의 기존파일은 날려버려요.') 
f.close() 



4. w+

f = open('C:/Users/itisik/Documents/ITisik.txt', 'w+') 
f.read() 
f.write('w+모드라서 읽고 쓸 수 있지만, 같은 이름의 기존파일은 날려버려요.') 
f.close() 

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r') 
f.read() 
f.close() 


5. a

f = open('C:/Users/itisik/Documents/ITisik.txt', 'a') 
f.read() 
f.write('a모드라서 쓸 수만 있다.') 
f.close() 

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r') 
f.read() 
f.close() 


6. a+

f = open('C:/Users/itisik/Documents/ITisik.txt', 'a+') 
f.read() 
f.write('a+모드라서 읽고 쓸 수 있어요.') 
f.close() 

f = open('C:/Users/itisik/Documents/ITisik.txt', 'r') 
f.read() 
f.close() 

 

(기존 파일이 있으면 지워버리고) 새 파일 만들기

f = open('c:/users/itisik/documents/first_text_file.txt', 'w+') 
for i in range(1, 11): 
    line = "%d번째 줄\n" % i 
    f.write(line) 

f.close() 

f = open('c:/users/itisik/documents/first_text_file.txt', 'r') 
f.read() 
f.close() 

 

파일을 라인 별로 읽어서 예쁘게 출력하기

  바로 위에서 f.read()를 통해 읽어들인 글은 줄바꿈 문자가 \n으로 표현된 다소 지저분한 상태로 출력되었다. 이번 파트에서는 txt 파일을 라인 별로 읽어들여서 예쁘게 출력시켜보도록 하자.

f = open('c:/users/itisik/documents/first_text_file.txt', 'r') 
while True: 
    line = f.readline() 
    if not line: break 
    print(line) 

f.close() 


모든 라인 한 번에 읽어들이기

  바로 이전의 파트에서는 readline() 함수와 while문을 통해서 각 줄 별로 읽어들이고 출력하는 코드를 작성해보았다. 이번에는 readlines() 함수를 통해서 한 번에 모든 라인을 읽어들여 for문을 통해 출력하는 코드를 작성해보자.

f = open('c:/users/itisik/documents/first_text_file.txt', 'r') 
lines = f.readlines() 
for line in lines: 
    print(line) 

f.close() 


제일 간단한 print() 함수를 이용한 방법

  사실 위와 같이 readline() 함수나 readlines() 함수를 이용하지 않고도 예쁘게 출력하는 심플한 방법이 존재한다. read()함수로 불러와진 텍스트를 print() 함수를 통해 출력하는 방법이다.

f = open('c:/users/itisik/documents/first_text_file.txt', 'r') 
print(f.read()) 
f.close() 


with문을 이용하여 불러온 파일 객체 자동으로 close하기

  open() 함수로 인해 불러온 f객체는 파이썬 종료와 함께 소멸되지만, 그럼에도 불구하고 어지간하면 직접 f객체를 닫아주는 것이 좋다. 때문에 지금까지 코드의 맨 마지막에는 항상 f.close()가 붙었는데 with 키워드를 사용하여 자동으로 f객체가 닫히도록 만들어줄 수 있다.

with open('c:/users/itisik/documents/first_text_file.txt', 'r') as f: 
    print(f.read())
with open('c:/users/itisik/documents/first_text_file.txt', 'w') as f: 
    print(f.write('The End.'))

  여기까지가 파이썬에서의 파일 읽기, 쓰기에 대한 내용이다. 다음부터는 본격적으로 파이썬에 대한 핵심들?에 대해서 포스트하려고 한다. 클래스가 아마도 그 시작일 것 같다.

반응형