64 - (파이썬) 기본 파일 처리
파일은 크게 텍스트 파일과 바이너리 파일로 나뉘는데, 여기서는 텍스트 파일만 다룸.
우선 Replit에 test.txt 파일을 만들고 다음과 같이 작성한다.
안녕 세계! |
오키. 이제 이거 가져다 쓰자.
# 파일 처리
: 읽기 처리(r) / 쓰기 처리(w,a)
#(1) 스트림 연결
testflie = open("test.txt", "r")
# 모드 종류 : w 쓰기 모드 / a 추가해서 쓰기 모드 / r 읽기 모드
#(2) 스트림을 통한 데이터 통신
teststr = testflie.read()
print(teststr)
#(3) 스트림 해제
testflie.close()
>>>
안녕 세계!
그런데 프로그램이 길어지면 open()함수와 close()함수 사이에 내용이 길어지고 열고 닫는 것을 잊어버리기 쉬워진다. 이런 실수를 방지하기 위해 with 키워드라는 기능을 사용할 수 있다.
with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체 : 문장 |
그래서 따로 close 없이 사용할 수 있다.
with open("test.txt", "r") as testflie:
teststr = testflie.read()
print(teststr)
>>>
안녕 세계!
write 쓰기 모드를 이용할 경우, 파일이 없더라고 새로 만들어 주기 때문에
with open("newtest.txt", "w") as testflie:
testflie.write("[속보] '채상병 순직 사건' 임성근 전 사단장 혐의 없음....")
으로만 작성하면 print에는 아무것도 없지만 newtest.txt라는 파일이 만들어지고 그 안에 해당 내용이 들어감을 확인할 수 있다.
여기에 append 뒤에 이어 쓰기 모드로 작성한 뒤 코드를 돌리면
with open("newtest.txt", "a") as testflie:
testflie.write("해병대 관계자 6명 송치·3명 불송치 결정")
with open("newtest.txt", "a") as testflie:
testflie.write("진짜 가지가지 하네... 네티즌들 분노")
newtest.txt라는 파일 안애 위의 내용들이 추가되는 것을 확인할 수 있다.
파일 처리를 배우면 프로그램이 연속성을 가진 것을 볼 수 있게 된다.
# 데이터를 누적하는 프로그램
: 일반적인 프로그램은 랜덤과 시간을 활용하는 것이 아닌 경우에 항상 동일한 결과가 나오게 되지만, 외부환경(파일, 인터넷 등)과 스트림을 열어 연결할 경우 실행 때마다 다른 결과가 나올 수 있다. (eg. 미세미세, 장마 예측 등)
# 데이터를 누적하는 프로그램
reoweight = input("입력값: ")
#(1) 스트림 연결
reoflie = open("ReoWeight.txt", "a")
# 모드 종류 : w 쓰기 모드 / a 추가해서 쓰기 모드 / r 읽기 모드
#(2) 스트림을 통한 데이터 통신
reoflie.write(reoweight + "\n")
#(3) 스트림 해제
reoflie.close()
open 코드를 위에 추가하면
# 데이터를 누적하는 프로그램 열어보기
reoflie = open("ReoWeight.txt", "r")
print(reoflie.read().split("\n"))
reoflie.close()
# 데이터를 누적하는 프로그램
reoweight = input("입력값: ")
#(1) 스트림 연결
reoflie = open("ReoWeight.txt", "a")
# 모드 종류 : w 쓰기 모드 / a 추가해서 쓰기 모드 / r 읽기 모드
#(2) 스트림을 통한 데이터 통신
reoflie.write(reoweight + "\n")
#(3) 스트림 해제
reoflie.close()
>>>
['7.2kg', '7.6kg', '7.8kg', '']
입력값:
아, 마지막에 빈 문자열이 있는 이유는 문서에 진짜 빈문자열이 있어서 그려. 이 문자열을 지우기 위해서는 strip()함수를 넣어주면 됨.
# 데이터를 누적하는 프로그램 열어보기
reoflie = open("ReoWeight.txt", "r")
print(reoflie.read().strip().split("\n"))
reoflie.close()
# 데이터를 누적하는 프로그램
reoweight = input("입력값: ")
#(1) 스트림 연결
reoflie = open("ReoWeight.txt", "a")
# 모드 종류 : w 쓰기 모드 / a 추가해서 쓰기 모드 / r 읽기 모드
#(2) 스트림을 통한 데이터 통신
reoflie.write(reoweight + "\n")
#(3) 스트림 해제
reoflie.close()
>>>
['7.2kg', '7.6kg', '7.8kg']
기존의 내용을 모두 지우고 실행하게 되면 ['']와 같은 빈 문자열이 출력되는 데, 이것을 지우고 싶다면 if 조건문 하나를 추가하면 된다.
# 데이터를 누적하는 프로그램 열어보기
reoflie = open("ReoWeight.txt", "r")
reodata = reoflie.read()
if reodata != "":
print(reodata.strip().split("\n"))
reoflie.close()
# 데이터를 누적하는 프로그램
reoweight = input("입력값: ")
#(1) 스트림 연결
reoflie = open("ReoWeight.txt", "a")
# 모드 종류 : w 쓰기 모드 / a 추가해서 쓰기 모드 / r 읽기 모드
#(2) 스트림을 통한 데이터 통신
reoflie.write(reoweight + "\n")
#(3) 스트림 해제
reoflie.close()