Data_Analysis_Track_33/Python_문제풀이

Python_04_문제풀이(입출력)

lsc99 2023. 8. 25. 18:47

문제 내용 : 간단한 터미널 기반 메모장
- 사용자로부터 파일명을 입력받는다.
- 사용자로부터 파일에 저장할 문장을 입력받아서 파일에 저장한다.
- 한줄씩 입력받는다.
- 사용자가 !q 를 입력하면 저장후 종료한다.
- 사용자가 저장한 파일을 읽어서 출력한다.

 

두가지 방식으로 풀어보았다.

1.

import os
os.chdir(r"C:\Users\Playdata\Desktop\01_Python") # 현재 작업 디렉토리 변경 (절대경로)
# 1. 파일명 입력
file_name = input('파일명을 입력하세요. : ')
# 2. 연결
os.makedirs("files", exist_ok = True)
fw = open("files/"+file_name, "wt", encoding = "utf-8") # 쓰기 모드
while True:
    sentence = input('저장할 문장을 입력하세요. :')
    if sentence == '!q':
        break 
    else:
        fw.write(f"{sentence}\n")

fw.close()

fr = open("files/"+file_name, "rt", encoding = "utf-8") # 읽기 모드

read_txt = fr.read()
print(read_txt)

fr.close()

2.

import os
os.chdir(r"C:\Users\Playdata\Desktop\01_Python") # 현재 작업 디렉토리 변경
# 1. 파일명 입력
file_name = input('파일명을 입력하세요. : ')
# 2. 연결
os.makedirs("files", exist_ok = True)
fw = open("files/"+file_name, "wt", encoding = "utf-8") # 쓰기 모드

sentence = [] # 빈 리스트 생성
while True:
    txt = (input('저장할 문장을 입력하세요. :')) # 문자열 변수 저장
    if txt == '!q': # !q 입력시 반복문 중단
        break 
    else:
        sentence.append(txt) # !q가 아닌 txt들 sentence리스트에 저장

for i in sentence:
    print(i)
    fw.write(i+"\n") # 파일에 리스트내용을 한줄씩 추가
    
fw.close()

- 강사님 버전

1.

#### 강사님 버전
os.makedirs("files", exist_ok=True) # 파일들을 저장할 디렉토리 생성
# 1. 파일명 입력
filename = input('저장할 파일명:')
file_path = os.path.join("files", filename)
print(file_path)
# 2. 연결
fw = open(file_path, "wt", encoding = "utf-8")
print("저장할 text를 입력하세요. : ")
# 3. !q가 입력될때까지 출력
while True:
    line = input(">>>")
    if line == "!q":
        break
    fw.write(line+"\n") # input() 은 엔터는 읽지 않는다. 그래서 뒤에 엔터를 추가
    # fw.write() -> buffer(임시저장소)에 출력
    fw.flush() # buffer 내용을 연결된 자원에 출력
print("종료")
# 4. close (종료)
# fw.close()

2. with block 활용

# 강사님 버전
os.makedirs("files", exist_ok=True) # 파일들을 저장할 디렉토리 생성
filename = input('저장할 파일명:')
file_path = os.path.join("files", filename)
# with block 구현
with open(file_path, "wt", encoding = "utf-8") as fw:
    print("저장될 내용을 입력하세요.")
    while True:
        # 한줄 읽기
        line_txt = input(">>>")
        # !q가 입력되면 종료
        if line_txt == "!q":
            break
        # 파일 출력
        fw.write(line_txt + "\n")

# with block 종료시 close는 자동으로 처리
print('종료')

3. 모듈 및 함수화

%%writefile simple_memo.py
import os
# 강사님 버전, 함수화
def simple_memo():
    os.makedirs("files", exist_ok=True) # 파일들을 저장할 디렉토리 생성
    filename = input('저장할 파일명:')
    file_path = os.path.join("files", filename)
    # with block 구현
    with open(file_path, "wt", encoding = "utf-8") as fw:
        print("저장될 내용을 입력하세요.")
        while True:
            # 한줄 읽기
            line_txt = input(">>>")
            # !q가 입력되면 종료
            if line_txt == "!q":
                break
            # 파일 출력
            fw.write(line_txt + "\n")
        
    # with block 종료시 close는 자동으로 처리
    print('종료')
    
if __name__ == "__main__":  # import 실행이나닌 main 모듈로서의 실행만 가능하도록(shell에서의 실행도 가능하다.)
    simple_memo()

 

from simple_memo import simple_memo as s_memo

s_memo()