study with Q - 파이썬

64 - (파이썬) 기본 파일 처리

quaquaz 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()

https://replit.com/@wh3308/pailceori#main.py