3. 원하는 메모를 파일에 저장하고 추가 및 조회가 가능한 간단한 메모장을 만들어 보자.
입력: 메모할 내용
기능: 입력한 내용 저장/추가하기, 저장된 내용 조회하기
1) 저장할 파일은 "memo.txt", 입력값은 m으로 지정
먼저 "memo.txt" 파일을 디렉토리에 만들고, m을 memo.txt에 작성하도록 한다.
m = input("내용을 입력하세요: ")
f = open("C:/doit/memo.txt", 'w')
2) 저장할 내용은 입력값(메모할 내용)
입력값을 memo.txt에 작성하고 닫아준다.
f.write(m + "\n")
f.close()
3) 조회: 파일을 읽기 모드로 열어 저장된 내용을 조회한다.
f = open("C:/doit/memo.txt", 'r')
save = f.read()
print(save)
f.close()
4) 메모를 추가한 후 조회한다.
f = open("C:/doit/memo.txt", 'a')
f.write(input("내용을 입력하세요: ") + "\n")
f = open("C:/doit/memo.txt", 'r')
save = f.read()
print(save)
f.close()
*만들고 난 후 문제점: 1. 입력 후 조회 -> 2. 추가 입력 후 조회까지만 됨..
근데 어떻게 고치는지 모르겠다..
- 해설
1) 다음 명령을 실행했을 때 메모를 추가할 수 있도록 만든다.
python memo.py -a "Life is too short"
이를 위해 입력으로 받은 옵션과 메모를 출력하는 코드를 작성한다.("memo.py")
# C:/doit/memo.py
import sys
option = sys.argv[1]
memo = sys.argv[2]
print(option)
print(memo)
sys.argv는 프로그램을 실행할 때 입력된 값을 읽어 들일 수 있는 파이썬 라이브러리
sys.argv[0]는 입력받은 값 중에서 파이썬 프로그램 이름인 "memo.py",
sys.argv[1]은 프로그램 실행 옵션 값, sys.argv[2]는 메모 내용
* 그림 떠올리기
2) 입력으로 받은 메모를 파일에 쓰도록 "memo.py"의 코드를 변경한다.
# c:/doit/memo.py
import sys
option = sys.argv[1]
if option == '-a':
memo = sys.argv[2]
f = open('memo.txt', 'a')
f.write(memo)
f.write('\n')
f.close()
3) 메모를 조회할 때는 type 이용
C:\doit>type memo.txt
*type은
4) 이번에는 작성한 메모를 출력하는 부분을 만든다. 메모 출력은 다음과 같이 동작하도록 만든다.
python memo.py -v
"memo.py"에 메모를 출력할 수 있는 코드를 추가한다.
if option == '-v':
f = open('memo.txt', 'r')
save = f.read()
print(save)
f.close()
*이건 앞에서 본 해설을 바탕으로 혼자 작성한 코드
그런데 해설과 또 다른 점은
elif option == '-v':
f = open('memo.txt')
memo = f.read()
f.close()
print(memo)
a) 여러 가지 조건을 판단하는 elif를 사용함 : 요 부분만 고치면 해결
b) 파일을 그냥 열어줌('r'을 쓰지 않으면 자동으로 읽기 모드로 열린다. 그래서 결과는 같음!) - 근데 까먹고 있었음ㅋㅋ
c) 파일을 먼저 닫은 후에 print함(이건 닫고 프린트하나 프린트하고 닫으나 똑같다고 함)
이렇게 되면 "python memo.py -a" 로 메모를 추가하고
"python memo.py -v"로 메모를 읽을 수 있다.
외장함수 부분을 할 때 잘 이해되지 않았던 부분인데, 이걸 하고 나니 조금 이해된 것 같다!!
'강의 > 점프투파이썬' 카테고리의 다른 글
[점프투파이썬] 5. 하위 디렉터리 검색하기(os.listdir/os.path.join/splitext/isdir/os.walk) (0) | 2020.03.17 |
---|---|
[점프투파이썬] 4. 문서에 있는 탭(tab)을 공백(space)으로 바꾸기(sys.argv/replace) (2) | 2020.03.17 |
[점프투파이썬] 2. 게시판 페이징하기 (0) | 2020.03.17 |
[점프투파이썬] 1. 3의 배수와 5의 배수의 총합 구하기 (0) | 2020.03.17 |
댓글