패스트캠퍼스 챌린지 22일차 (Python)
# 게시글 로딩하기
# data.csv 파일 있으면 게시글을 로딩
# data.csv 파일이 없으면 파일을 만든다.
# 1. data.csv를 읽는다.
# 2. 데이터 한 줄씩 읽고 한줄마다 Post 인스턴스를 만든다.
# 3. Post 리스트에 인스턴스를 저장한다.
import os
import csv
from post import Post
# 파일 경로
file_path = "./myvenv/Chapter12/data.csv"
# Post 객체를 저장 할 리스트
post_list = []
# data.csv 파일이 있다면
if os.path.exists(file_path):
# 게시글 로딩
print("게시글 로딩중입니다.")
# csv 파일 읽기
f = open(file_path, "r", encoding="utf-8")
# reader로 하면 한 줄씩 읽어온다
reader = csv.reader(f)
for data in reader:
# Post 인스턴스 생성하기
post = Post(int(data[0]), data[1], data[2], int(data[3]))
# post 리스트에 append하기
post_list.append(post)
else:
# 게시글이 없다면 파일 생성하기
f = open(file_path, "w", encoding="utf-8", newline="")
f.close()
# 게시글 등록
# 1. Post 인스턴스 생성
# 2. Post 리스트에 저장
# Post 인스턴스
# 1.글번호 2.제목 3.내용 4.조회수
def write_post():
"""
게시글 쓰기 함수
"""
print("\n\n -게시글 쓰기")
title = input("제목을 입력해주세요 \n >>>")
content = input("내용을 입력해주세요 \n >>>")
# 글번호
id = post_list[-1].get_id() + 1
post = Post(id, title, content, 0)
post_list.append(post)
print(" # 게시글이 등록되었습니다.")
# 게시글 목록
# 게시글 목록 출력하기
# 글 번호 선택하기
# 1. 없는 글 번호 -> 무한 반복
# 2. -1 입력시 -> 메뉴로 복귀
# 3. 올바른 글 번호 -> 게시글 상세 정보
def list_post():
"""
게시글 목록 함수
"""
print("# 게시글이 등록 되었습니다. ")
id_list = []
for post in post_list:
print("번호:", post.get_id())
print(":", post.get_title())
print("번호:", post.get_view_count())
print("")
id_list.append(post.get_id())
while True:
print("Q) 글 번호를 선택해주세요 (메뉴로 돌아가려면 -1을 입력해주세요)")
try:
id = int(input(">>>"))
if id in id_list:
detail_post(id)
break
elif id == -1:
break
else:
print("없는 글 번호입니다.")
except ValueError:
print("숫자를 입력해주세요")
# 게시글 상세정보 확인하기
# 1. 사용자가 입력한 글번호와 같은 게시글 찾기
# 2. 조회수 증가 및 상세 내용 출력
# 3. 수정, 삭제 기능을 수정할때엔 Post 객체를 넘겨주기
def detail_post(id):
"""
게시글 상세보기 함수
"""
print("\n\n 게시글 상세-")
for post in post_list:
if post.get_id() == id:
# 조회수 1 증가
post.add_view_count()
print("번호", post.get_id())
print("제목", post.get_title())
print("본문", post.get_content())
print("조회수", post.get_view_count())
target_post = post
while True:
print("Q) 수정: 1 삭제: 2 (메뉴로돌아가려면 -1을 입력")
try:
choice = int(input(">>>"))
if choice == 1:
update_post(target_post)
break
elif choice == 2:
delete_post(target_post)
break
elif choice == -1:
break
else:
print("잘못입력하였습니다.")
except ValueError:
print("숫자를 입력해주세요")
# 게시글 수정
def update_post(target_post):
"""
게시글 수정 함수
"""
print("\n\n 게시글 수정")
title = input("제목을 입력해주세요\n >>>")
content = input("본문을 입력해주세요\n >>>")
target_post.set_post(target_post.id, title, content, target_post.view_count)
print(" # 게시글이 수정되었습니다.")
# 게시글 삭제
def delete_post(target_post):
"""
게시글 삭제 함수
"""
post_list.remove(target_post)
print("게시글이 삭제되었습니다.")
# 게시글 저장하기
def save():
"""
게시글 저장 함수
"""
f = open(file_path, "w", encoding="utf-8", newline="")
writer = csv.writer(f)
for post in post_list:
row = [post.get_id(), post.get_title(), post.get_content(), post.get_view_count()]
writer.writerow(row)
f.close()
print("저장이 완료되었습니다.")
# 메뉴 출력하기
while True:
print("\n\n- FASTCAMPUS BLOG")
print("- 메뉴를 선택해주세요")
print("1. 게시글 쓰기")
print("2. 게시글 목록")
print("3. 프로그램 종료")
# 문자를 썼을때 에러가 발생
try:
choice = int(input(">>>"))
except ValueError:
print("숫자를 입력해주세요")
else:
if choice == 1:
write_post()
elif choice == 2:
list_post()
elif choice == 3:
save()
break
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'FastCampus 강의 > Python' 카테고리의 다른 글
패스트캠퍼스 챌린지 24일차 (Python) (0) | 2022.02.16 |
---|---|
패스트캠퍼스 챌린지 23일차 (Python) (0) | 2022.02.15 |
패스트캠퍼스 챌린지 21일차 (Python) (0) | 2022.02.13 |
패스트캠퍼스 챌린지 20일차 (Python) (0) | 2022.02.12 |
패스트캠퍼스 챌린지 19일차 (Python) (0) | 2022.02.11 |