파이썬/파이썬 입문 공부일지

파이썬 공부일지 20. 파일처리!

Tomitom 2022. 10. 19. 16:14
반응형

 

 

파일은 크게 텍스트 파일와 바이너리 파일로 나뉘는데, 이번에는 텍스트 파일의 파일처리에 대해서 알아봅니다. 

 

기본적으로 파일을 열 때에는 open() 함수를 사용합니다. 

 

파일 객체 = open(디렉토리 경로와 파일명, 문자열 읽기모드)

첫 번째 매개 변수로는 파일의 경로를 입력하고, 두 번째 매개 변수로는 파일의 읽는 방법을 지정합니다. 

파일의 문자열 모드는 크게 세 가지가 있습니다. 

w write 모드 (새로쓰기 모드 )
a append 모드 (이어쓰기 모드)
r read 모드 (읽기 모드) 

파일을 닫을 때에는 close()함수를 사용합니다. 

모든 파일은 open 후에 close 를 하는 버릇을 꼭꼭 가져야해요. 

 


우선 문자열 읽기 모드 중 w와 a모드를 확인해볼게요. 

 

w와 a모드에는 특별한 기능이 있습니다. 

디렉토리 경로에 현재 없는 파일이거나 없는 경로를 입력할 경우에는 코드에 입력한 파일명대로 파일이 생성됩니다. 

r모드에서는 존재하지 않는 파일을 열 수 없으므로 에러가 발생합니다. 

 

w로 텍스트 파일을 하나 만들어 볼게요. 

 


file = open("love.txt", "w") # love 라고 하는 텍스트 파일을 새로 쓸게요.
file.write("사랑은 멋진거야!")
file.close     # 파일을 열면 반드시 닫아주는 습관을 가져야 합니다.

이렇게 작성해서 실행하면 현재 코드가 실행되는 곳에서 txt 파일이 생성된 것을 확인할 수 있습니다. 

사랑은 멋진 거지

open()함수와 close() 함수 사이가 복잡해질 때 close 함수를 잊어버려서

프로그램이 닫히지 않은 상태로 방치되는 것을 미연에 방지하기 위해 with 키워드를 사용해서 작성할 수 있습니다. 

with 키워드를 사용하며  with 구문이 종료될 때 자동으로 프로그램이 종료됩니다. 

 

좋아하는 구절이에요

프로그램이 외부 파일이나 외부 네트워크와 통신할 때 데이터가 흐르는 길을 만드는 것이 스트림stream  이에요. 

흐르는 강줄기처럼 나있는 길이죠. open() 함수는 파일로 흐르는 길을 만들어주는 것이고 

close() 함수는 프로그램에서 파일로 흐르는 길을 말해요.

 

with 키워드는 open() 함수 이후에 close() 함수로 stream을 닫아주는 것을 잊어버리지 않기 위해 

미연에 방지하기 위한 구문이라고 생각하시면 됩니다. 

 


 

다음은 r모드를 확인해볼게요.

텍스트의 읽기 모드입니다.  read()함수를 사용합니다. 

파일객체.read() 

 

조금 전에 위에서 love 로 작성된 텍스트 파일을 읽어볼게요. 



with open("love.txt", "r") as file :    # with 구문을 이용해서 텍스트 읽기
    contentes = file.read()   # 파일객체.read() 구문으로 파일을 읽어주기, 변수에 저장

print(contentes)     # 변수 출력
 

 

이렇게 하면 조금 전에 입력했던 멋진 사랑이 출력됩니다.. 

 

 

멋진 사랑..

 


이제 이것을 응용해서 랜덤하게 데이터를 작성하는 것을 해볼게요.

지금부터 1000명의 사람을 만들건데 이름 / 몸무게 / 키 순으로 랜덤하게 작성해서 텍스트 파일로 저장할게요. 

우선 랜덤한 숫자들을 뽑아야 합니다. 

데이터를 한 줄씩 받아올 때에는 for 반복문을 작성하면 됩니다. 

 

 

# 숫자 랜덤 모듈
import random    ->    모듈은 파이썬에 저장되어 있는 기능 중 하나인데, random 요소를 출력할 때 쓰는 random 모듈을 불러옵니다. 

# 한글리스트
hanguls = list("영희철수국희치즈계재영수열왕소고마재열")  -> 이름의 조합에서 나열할 한글의 리스트를 작성해주어요. 

with open("info.txt","w") as file :      -> 텍스트 파일로 새로 쓰기 위해 쓰기 모드로 새로운 info.txt 파일을 열어줍니다. 
 
    for i in range(1000):       -> 텍스트 파일에 순서대로 작성해야 하기 때문에 순서대로 나열할 수 있도록 함수를  작성합니다.  1000명을 만들어야 하니까 range 범위를 1000으로 해서 반복문을 작성할게요. 
 
        name = random.choice(hanguls) + random.choice(hanguls)    -> random.choice 함수는 리스트에서 랜덤하게 한 글자를 추출하는 함수입니다. 랜덤초이스 + 랜덤초이스 -> 2글자의 한글을 추출하고 그 값을 name 이라는 변수에 저장해요.
 
        height = random.randrange(140,190)    -> random 모듈 중에 randrange(x,y) 값은 x와 y 사이의 값을 랜덤하게 하나 출력하는 것이에요. 키를 출력합니다. 
        weight = random.randrange(40,100)  -> 몸무게를 출력합니다. 
 
 
        file.write(f"{name}, {weight}, {height}\n")  -> 그 뒤에 open 으로 열어준 info.txt 파일에 차례대로 이름, 몸무게, 키 순으로 작성합니다. 
 
 
 
 
 
 
 
with 함수를 썼기 때문에 따로 close()를 쓰지 않아도 자동으로 닫힙니다.
코드를 돌리고, 새로운 텍스트가 작성되었는지 확인해볼게요. 
 

 

총 1000명의 이름과 몸무게와 키가 생성되었습니다!

파이썬은 배울수록 참 편리하다는 생각과 함께, 문법은 쉽지만 응용이 어렵다는 것을 새삼 느낍니다 ㅠㅜ 

논리력을 키우고 알고리즘을 많이 연습해봐야겠어요. 

   

반응형