-
64 - (파이썬) 기본 파일 처리study with Q - 파이썬 2024. 7. 8. 15:30
파일은 크게 텍스트 파일과 바이너리 파일로 나뉘는데, 여기서는 텍스트 파일만 다룸.
우선 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()
'study with Q - 파이썬' 카테고리의 다른 글
66 - (파이썬) 이터러블, 이터레이터, 제너레이터 함수, 제너레이터 표현식 (0) 2024.07.09 65 - (파이썬) CSV 파일 읽고 쓰기 (1) 2024.07.08 63 - (파이썬) 람다, key 키워드 매개변수 (0) 2024.07.03 62 - (파이썬) map/filter 함수 구현 (0) 2024.07.03 61 - (파이썬) 콜백함수, map/filter 함수 (0) 2024.07.01