ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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()

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

Designed by Tistory.