본문 바로가기
Python

[Python 기초] 파이썬 파일 다루기 - 쓰기 : open() , write() , close()

by dev수니 2021. 4. 5.
반응형

 

 

 

 

 1  파일 다루기

 

 

우리는 여태껏 직접 코드를 입력하고 그 결과를 모니터에 출력받아서 결과를 확인하는 방식으로 코딩해왔다. 이 입력과 출력의 기능을 파일에 적용하여 파이썬으로 소스를 작성하고 그 소스로 파일을 생성하고 파일안의 내용을 작성 및 추가할 수 있다.

 

 

일단 파이썬으로 파일을 작성하려면 어떤방식으로 진행해야 하는지 순서를 보자.

 

 

 

1. 파일을 연다.
2. 파일에서 데이터를 읽거나 쓸 수 있다.
3. 파일과 관련된 작업이 모두 종료되면 파일을 닫아야 한다.

 

 

위 세 방식이 파이썬 내에 내장되있는 기능들로 작업이 가능하다.

 

 

 


 

 2  파일 생성하기

 

 

파이썬에서 파일을 다룰 때는 기본 내장함수인 open()함수를 활용한다. open()함수는 다음과 같이 작성하여 사용할 수 있다.

 

객체 = open("파일경로.확장자명",'모드')

 

 

객체를 open()으로 열어 줬으면 객체가 끝났다고 닫아주어야 작성해준 내용이 정상적으로 저장된다.
파일을 닫지 않으면 버퍼링 되어있는 데이터가 저장되지 않고 소실될 수 있는 위험성이 있기 때문에 직접 작성하여 닫아주는 것이 좋다. 다음과 같이 작성하여 객체를 닫아줄 수 있다.

 

객체.close()

 

 

 

다음과 같이 객체를 생성해줄 수 있다.

1
2
3
= open("TestFile.txt",'wt')
 
f.close()
cs

 

파일이 생성되는 경로를 따로 지정하지 않으면 파이썬 스크립트가 위치한 동일한 경로에 파일을 생성한다.

따라서 해당 소스를 작성한 파일이 위치한 디렉터리를 들어가보면 TestFile.txt가 생성된 것을 볼 수 있다.

 

 

 


 

 

 3  open()함수

 

 

open() 함수 사용시 설정할 수 있는 모드는 세 종류가 있다.

 

 

1. 쓰기모드 'w'(write)
2. 읽기모드 'r'(read)
3. 추가모드 'a'(append)

 

 

세가지 중 하나와 t(텍스트), b(바이너리) 둘중 하나와 결합하여 사용해야 한다. (생략가능한 모드도 있지만 왠만해선 사용해주는 게 좋다.)

ex) 'wt' , 'rb' 로 사용.


b(바이너리)는 byte 형식을 말한다. 파일의 확장자명을 .bin으로 사용한다.

 

1
2
3
= open("TestFile.txt",'wt')
 
f.close()
cs

위 코드에서 줄1의 'wt'부분이 모드로 설정해준 부분이다.

 


 

 

 

 4  쓰기모드

 

 

파일을 입력 할 때 write()함수를 사용 한다. 파일에 데이터를 입력하는 내장함수이다.

 

write() 함수의 특징은 다음과 같다.


1. 복수의 데이터를 입력할 수 없다.
2. 문자열 데이터만 입력 가능하다.
3. 개행(줄바꿈이 포함되어있지 않다.)

 

따라서 만약 다른 자료형들을 저장하고 싶은 경우 pickle 모듈을 이용해야 한다. pickle모듈은 나중에 다시 설명하겠다.

 

 

먼저 아까 만들어준 파일창에 다음과 같이 코드를 추가한다.

1
2
3
4
5
6
= open("TestFile.txt",'w')
 
f.write("soon\n")
f.write("파이썬 안녕")
 
f.close()
cs

 

 

해당 파일을 run시켜주면 위 코드가 오류없이 정상적으로 실행된것을 확인할 수 있다.

 

 

 

TestFile.txt 로 들어가 확인해보면 다음과 같이 내용이 저장된 것을 확인할 수 있다.

 

 

그리고 소스코드 파일에 write() 함수로 정수도 입력해본다.

1
2
3
4
5
6
7
8
= open("TestFile.txt",'w')
 
f.write("soon\n")
f.write("파이썬 안녕")
f.write(1)
 
f.close()
cs

 

 

write() 함수는 문자열 입력만 받기 때문에 다음과 같이 TypeError가 난 것을 확인할 수 있다. 에러가 발생했기 때문에 파일에도 아무런 영향을 끼치지 않는다.

 

 

 


 

다음 파일을 한번에 여러개 생성하는 방법에 대해 알아보자.

 

파일을 방법은 open 함수와 write 함수를 사용한다는 점은 같다. 하지만 생성할 파일의 이름을 list로 묶어주고 for문을 이용해 인덱스에 접근하여 value 값으로 파일을 생성해준다는 점이 추가적으로 알아야 할 부분이다.

 

 

다음 예제를 통해 자세하게 살펴보자.

1
2
3
4
5
6
7
8
9
namelist = ["이이이","김김김","박박박","정정정"]
 
for i in namelist:
     f = open("[%s].txt"%i,"wt")
     f.write('''이름:%s    
나이:%d
성별:%c
번호:%s
'''%("이서희",20,"f","010-1234"))     # '''를 사용하여 여러줄 입력
cs

 

먼저 줄1에서 파일의 이름를 list로 묶어주었고, for문을 통해 namelist의 value값을 추출해내 i 에 담았다. 그리고 쓰기모드를 연 후 i 값을 파일이름으로 지정해주었다.

그리고 줄5에서 write로 이름과 나이, 성별, 번호를 입력해주었다. 여기서 여러타입을 포매팅해주어 각 문자열 자리에 정보를 입력해주었다. 

 

 

이를 run하고 디렉터리를 열면 다음과 같이 파일이 추가되어있고 내용이 저장된 모습을 볼 수 있다.

 

 

 

 

그리고 위의 코드에서 input() 을 이용해 입력받은 내용을 각 파일에 저장해보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namelist = ["이이이","김김김","박박박","정정정"]
 
for i in namelist:
     f = open("[%s].txt"%i,"w")
     name = input("이름>")
     age = int(input("나이>"))
     sex = input("성별>")
     phone = input("폰>")
     f.write('''이름:%s
나이:%d
성별:%c
번호:%s
'''%(name,age,sex,phone))
f.close()
cs

 

이를 run하고 Shell 창에 다음과 같이 입력한다.

 

 

위와 같이 입력 후 생성된 .txt파일들에 들어가보면 각 파일들에 입력시켜준 값이 저장된 것을 확인할 수 있다.

 

 

 

 

+plus 문자열 포매팅
 1. %d : 정수를 문자열 안에 삽입할 수 있다.
 2. %s : 문자열을 문자열 안에 삽입할 수 있다.
 3. %f : 실수를 문자열 안에 삽입할 수 있다.
      %.nf : n=표현할 소수점 자리수, 실수를 소수점 자리수를 지정해서 표현이 가능하다.
 4. %c : 문자형(한글자)를 문자열 안에 삽입할 수 있다.
 5. %(data1,data2) : 여러 타입을 포매팅을 해야 할 경우에 사용한다. 두개이상 포매팅할 경우 ,를 사용하여 구별한다.

>>> number = 3
>>> "I eat %d apples."% number     # 정수형 포매팅
'I eat 3 apples.'
>>> "나의 키는 %f입니다."%162.2      # 실수형 포매팅
'나의 키는 162.200000입니다.'
>>> "나의 키는 %.2f입니다."%162.2    # 실수형 포매팅(소수점 자리수 설정)
'나의 키는 162.20입니다.'
>>>

 



 


 

 

다음 내용을 여러줄 작성하는 방법에 대해 알아보자.

 

이번에도 역시 for문을 이용하면 되는데 아까는 for문안에서 open 함수를 사용해 파일을 생성하는 것을 반복해줬다면 이번에는 for문 밖에서 파일을 생성해주고 안에 내용을 for문을 통해 작성하는 방법이다.

 

1
2
3
4
5
6
7
8
= open("MyTestFile.txt",'wt')
 
# 1부터 10까지 데이터를 입력해준다.
for i in range(1,11):
     data = "%d번째 줄 입니다.\n"%i
     f.write(data)
 
f.close()
cs

위처럼 range() 함수를 이용해 1부터 10까지 i값을 반복하고 그 값을 문자열 안에 담아 변수 data에 담아준 후 f.write를 통해 파일에 출력해준다. 

 

 

위 코드를 run 한 후 디렉터리에서 파일을 열어보면 다음과 같이 데이터가 저장된 것을 확인할 수 있다.

 

 

 

 

 

 

 

반응형

댓글