관리 메뉴

14. 파이썬(Python) 파일 다루기(파일 읽기, 쓰기, 추가하기) 본문

Python/Python 기본 개념

14. 파이썬(Python) 파일 다루기(파일 읽기, 쓰기, 추가하기)

ª_ª 2017. 10. 26. 18:10
728x90
반응형



파이썬 파일 다루기

파이썬은 파일을 다룰 때 파일 읽기와 쓰기로 나뉩니다. 파일로부터 데이터를 읽거나 프로그램에서 결과 값을 파일로 저장을 할 수 있으면 학사관리 프로그램을 만드는데 유용할 것입니다.

 

파일이란?

글자들, 숫자들, 특수 문자들의 집합체입니다. 한글 파일(hwp), 워드 파일(doc), 엑셀파일(excel) 등입니다. 문서 파일 외에도 동영상 파일(.avi), 음악 파일(.mp3)등 다양한 부분에서 파일이란 용어를 사용하고 있습니다.

 

1. 파일 생성하기

파일을 생성하기 위해서는 open이라는 내장 함수를 사용해야 합니다. open 함수는 아래와 같이 만들 수 있습니다.

 

<사용 방법>

파일 객체 = open(파일 이름 or 경로 + 이름, 파일 열기 모드)

 

파일을 생성해보도록 하겠습니다.

f = open(“test.txt”, ‘w’)

f.close()




프로그램을 실행한 디렉터리에 새로운 파일(test.txt)이 생성된 것을 확인할 수 있습니다.

 


파일 열기 모드 종류

모드

설명

r

읽기 모드 : 파일을 읽기만 할 때 사용(파일이 없으면 에러)

r+

읽기 or 쓰기 모드 : 파일이 없으면 에러

w

쓰기 모드 : 파일에 내용을 입력할 때 사용(파일이 없으면 생성)

w+

읽기 or 쓰기 모드 : 파일이 없으면 생성

a

추가 모드 : 파일의 마지막에 새로운 내용을 추가할 때 사용(파일이 없으면 생성)

a+

읽기 or 추가 모드 : 파일이 없으면 생성

* +는 각자 조금 다른 작업을 합니다.

w+ : 기존 파일에 있던 데이터를 완전 지우고 새로 내용을 입력합니다.

r+ : 기존 파일에 있던 데이터를 그대로 두고 그 위에 내용을 덮어씁니다.

a+ : 기존 파일에 있던 데이터를 그대로 두고 마지막에 내용을 입력합니다.

 

2. 파일 쓰기 [f.write() 사용하기]

파일 쓰기 모드로 열 때 파일이 생성됩니다. 파일 안에는 아무 내용이 없습니다. 그 안에 내용을 채우기 위해서는 write()를 사용하면 됩니다.


>>> f = open("test.txt", "w")

>>> f.write("Hello Python!\n")

13

>>> f.write("Bye Python!")

12

>>> f.close()

두 문장을 사용했는데 문장의 가속성을 위해서 줄 바꿈 기호(“\n”)를 사용했습니다. 파일에 내용을 다 썼다면 f.close()를 사용해서 파일을 닫아 주면 됩니다. 파일을 닫아 주지 않으면 내용이 저장되지 않습니다.

 

3. 파일 읽기 [f.read() 사용하기]

파일 읽기 모드로 열 때는 파일이 존재해야 됩니다. 그렇지 않다면 에러를 발생시킵니다.

 

>>> f = open("test1.txt" ,"r")

Traceback (most recent call last):

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

f = open("test1.txt" ,"r")

FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt’

위와 같이 에러를 발생 시킵니다.

 

3_1. 파일 읽기1 (read)

>>> f = open("test.txt" ,"r")

>>> f.read()

'Hello Python!\nBye Python!‘

read() 함수는 줄 바꿈 없는 문자열을 반환합니다.

 

3_2. 줄 바꿈 하는 법 (read)

>>> f = open("test.txt" ,"r")

>>> read = f.read()

>>> print(read)

Hello Python!

Bye Python!

변수를 하나 생성해서 print()를 이용해서 출력하면 됩니다.

 

3_3. 리스트로 받는 법 (split)

>>> f = open("test.txt", "r")

>>> read = f.read()

>>> split = read.split()

>>> print(split)

['Hello', 'Python!', 'Bye', 'Python!']

>>> split

['Hello', 'Python!', 'Bye', 'Python!']

split()를 통해서 문자열을 리스트로 받을 수 있습니다.

 

3_4. 파일 읽기2 (readline)

>>> f = open("test.txt", "r")

>>> line = f.readline()

>>> print(line)

Hello Python!

readline은 파일의 첫 번째 줄을 출력합니다.

 

3_5. readline 활용법1

>>> f = open("test.txt", "r")

>>> while True:

line = f.readline()

if not line:        # 더 이상 읽을게 없다면

break        # 끝내라

print(line)

 

Hello Python!

 

Bye Python!

>>> f.close()

while문을 이용해 무한 루프를 만들었습니다. readline이 한 줄 씩 내용을 읽다가 아무것도 없을 때 braek문을 이용해 반복문을 빠져나옵니다.

 

3_6. readline 활용법2(자동 줄 바꿈 해제)

>>> f = open("test.txt", "r")

>>> while True:

line = f.readline()

if not line:

break

print(line, end ="")

Hello Python!

Bye Python!

>>> f.close()

print에서 end =“”문장을 넣어 두면 자동 줄 바꿈을 안하게 됩니다.

 

3_7. readlines 활용법

readlinesreadline에서 s가 하나 더 붙은 형태입니다.

 

>>> f = open("test.txt", "r")

>>> while True:

lines = f.readlines()

if not lines :

break

print(lines)

 

['Hello Python!\n', 'Bye Python!']

>>> f.close()

readlines는 파일의 모든 라인을 읽어서 한 줄씩 리스트로 리턴 합니다.

 

4. 파일에 새로운 내용 추가하기

쓰기모드(‘w’)로 파일을 열 때 이미 존재하는 파일을 열 경우에 그 파일의 내용이 다 사라지고 새로 써지게 됩니다. 원래 내용을 유지하고 새로운 내용만 추가 할 때 에는 추가모드(‘a’)를 사용합니다.

 

추가모드(‘a’)사용 하기

>>> f = open("test.txt", "a")

>>> f.write("\nUpdate Python")

14

>>> f.close()

파일을 열고 내용을 추가하고 파일을 닫았습니다.

f.close()를 사용하는 이유는 파일을 닫아야 저장되기 때문입니다.

 

내용이 잘 추가 되었는지 확인해 보겠습니다.

>>> f = open("test.txt", "r")

>>> read = f.read()

>>> print(read)

Hello Python!

Bye Python!

Update Python

>>> f.close()

내용이 잘 추가 된 것을 확인 할 수 있습니다.


 5. 파일 열기 모드(w+, r+, a+) 테스트

위에 써놨던 예제를

파일명 : w+test.txt / r+test.txt / a+test.txt

기존 파일내용 : Hello Python!

w+ 모드에서 “abc”를 입력 / 파일내용은 “abc”

r+ 모드에서 “abc”를 입력 / 파일내용은 “abclo Pyhon!”

a+ 모드에서 “Update Python!”를 입력 / 파일내용은 “Hello Python!Update Python!

 

5_1. w+ 테스트

1) w+test.txt 생성

>>> f = open("w+test.txt", "w")

>>> f.write("Hello Pyhton!")

13

>>> f.close()

 

2) w+test.txt 내용 입력

>>> f = open("w+test.txt", "w+")

>>> f.write("abc")

3

>>> f.close()

 

3) w+test.txt 내용 확인

>>> f = open("w+test.txt", "r")

>>> read = f.read()

>>> print(read)

abc

파일 내용을 새로 쓰기 때문에 이런 결과가 나옵니다.

 

5_2. r+ 테스트

1) r+test.txt 생성

>>> f = open("r+test.txt", "w")

>>> f.write("Hello Python!")

13

>>> f.close()

 

2) r+test.txt 내용 입력

>>> f = open("r+test.txt", "r+")

>>> f.write("abc")

3

>>> f.close()

 

3) r+test.txt 내용 확인

>>> f = open("r+test.txt", "r")

>>> read = f.read()

>>> print(read)

abclo Python!

기존 파일 위에 내용을 덮어 씌웠습니다.

 

5_3 a+ 테스트

1) a+test.txt 생성

>>> f = open("a+test.txt" , "w")

>>> f.write("Hello Python!")

13

>>> f.close()

 

2) a+test.txt 내용 입력

>>> f = open("a+test.txt", "a+")

>>> f.write("\nUpdate Python!")

14

>>> f.close()

 

3) a+test.txt 내용 확인

>>> f = open("a+test.txt", "r")

>>> read = f.read()

>>> print(read)

Hello Python!

Update Python!

>>> f.close()

내용은 유지되고 새로운 내용이 추가된걸 확인 할 수 있습니다. 






728x90
반응형
Comments