Python - 게시판(수정,삭제)

do yeon kim·2022년 6월 4일
0

Python(기초)_fastcampus

목록 보기
21/21

프로젝트 설명

게시판 만들기 프로젝트이다.
게시판에서 게시물쓰기, 게시물보기, 게시물상세보기, 게시물수정, 게시물삭제를 구현했다.

클래스만들기

import os #파일 경로를 위해서
import csv #csv파일을 쓰고 읽기 위해서


# 인스턴스변수로는 id, title, content가 있다. 
# 생성자의 매개변수로는 title과 content가 있고
# id값은 클래스 변수를 활용해서 설정해주었다.
# 클래스변수를 생정자안에 넣어서 객체가 생성될때마다 1씩 증가하게 했다.
# 이를 이용해서 객체의 id값으로 주었다.
class Board :
    number = 1
    def __init__(self, title, content):
        self.id = Board.number
        self.title = title
        self.content = content
        Board.number += 1

    def set_csvtype(self):
        return self.id, self.title, self.content  
        #csv파일에 데이터를 읽거나 쓰기 위해서는,
        #형태가 되어야 하므로 set_csvtype() 메서드를 만들었다.

    # def get_title(self):
    #     return self.title
    
    # def get_content(self):
    #     return self.content

    # def get_id(self):
    #     return self.id

    # def set_title(self, new_title):
    #     self.title = new_title
    
    # def set_content(self, new_content):
    #     self.title = new_content

데이터 가지고 오기

path = "data.csv"
#csv파일이 있는지 없는지 확인
if not os.path.exists(path) : #path에 해당하는 파일이 존재하는지 아닌지를 판단해서 True/False로 반환한다. 앞에 not 키워들로 존재하지 않으면 True
    file = open("data.csv", "w", newline="", encoding="UTF-8-sig") # 없으면 파일을 "w"모드로 열어서 생성해준다.
    file.close()

# 아래로 내려오면 이제 csv파일은 있는 경우이다.
# 먼저 csv파일에 데이터가 있는지 없는지를 확인해서 
# 데이터가 있다면 불러오고, 없다면종료

data_list = [] # 데이터가 있다면 데이터를 담을 리스트가 필요하다.

data_object_list = [] # 객체를 담는 데이터

#데이터가 있는 경우
if os.path.getsize("data.csv") > 0:
    print("데이터 로딩 중...........")
    print()
    
    check_file = open("data.csv", "r", encoding="UTF-8-sig")
    reader = csv.reader(check_file) 
    for data in reader: #리더객체이므로 하나씩 돌아가면 자료를  가지고 온다.
        board = Board(data[1], data[2])  # 가지고 온 자료로 객체를 만들어 준다. 
        board_data = board.set_csvtype() # 객체 그대로를 리스트에 추가하면 안되고, 객체의 id, title, content 데이터를 추가해야한다. set_csvtype()은 ,형태로 데이터를 만드는 것이다.
        data_list.append(board_data)  #게시판은 기존에 자료가 있어야 읽고, 다른 자룔르 추가할 수 있다. 
        data_object_list.append(board)
    
    check_file.close()


# 수정할 게시판 번호를 detail_choice 받아서 data_list[detail_choice-1]의 자료에 접근한다.
# 그러면 게시판번호, 게시판 타이틀, 게시판 본문 내용의 튜플이 온다.
# 여기서 튜플은 데이터의 추가 삭제가 불가능하므로 리스트로 바꾼다.
# 그후 각 데이터에 접근해서 값을 바꾸어준다.
# 마지막으로 file을 열어서 덮어씌어준다.

함수선언


#게시판 삭제
def delete(detail_choice):
    del data_list[detail_choice-1]
    
    file = open("data.csv", "w" ,newline="", encoding="UTF-8-sig") 
    writer = csv.writer(file)

    for data in data_list:
        writer.writerow(data)
    
    file.close()

#게시판 수정
def update(detail_choice):
    print("title을 입력하세요")
    title = input(">>>>>")
    print("content을 입력하세요")
    content = input(">>>>>")
    
    data_list[detail_choice-1] =  list(data_list[detail_choice-1])   
    data_list[detail_choice-1][1] = title                            
    data_list[detail_choice-1][2] = content                          

    file = open("data.csv", "w" ,newline="", encoding="UTF-8-sig") 
    writer = csv.writer(file)

    for data in data_list:
        writer.writerow(data)
    
    file.close()
    

    # data_object_list[detail_choice-1].title = title
    # data_object_list[detail_choice-1].content = content
    # data_object_list[detail_choice-1].set_title(title)
    # data_object_list[detail_choice-1].set_content(content)

    # data_object_list[detail_choice-1].title = title
    # data_object_list[detail_choice-1].content = content
    
    # print(data_object_list[detail_choice-1].get_id())
    # print(data_object_list[detail_choice-1].get_title())
    # print(data_object_list[detail_choice-1].get_content())
    
    # data_list[detail_choice-1] =  list(data_list[detail_choice-1])
    # data_list[detail_choice-1][1] = title
    # data_list[detail_choice-1][2] = content

    # print(data_list[detail_choice-1])
    

#게시판 상세보기
def show_detail(detail_choice):
    if len(data_list) > 0 :
        print()
        print(f"    {detail_choice}번글")
        print("==================")
        for data in data_list:
            if detail_choice == data[0]:
                print(f"title   : {data[1]}")
                print(f"content : {data[2]}")
                print()
                print()

        
            
        print("1.update  2.delete  3.back")
        print()
        while True:
            try :
                detail_show_mode_choice = int(input(">>>>>>"))
                if detail_show_mode_choice == 1:
                    update(detail_choice)
                    break
                elif detail_show_mode_choice == 2:
                    delete(detail_choice)
                    break
                elif detail_show_mode_choice == 3:
                    break
                else :
                    print("잘못입력하셨습니다.(1/2/3)")
                    print()
            except ValueError:
                print(">숫자를 입력하세요<")
                print()

    else:
        print("게시물이 존재하지 않습니다.")

        
# 게시판 보기
def show_board():
    print()
    print("       게시물")
    print("==================")
    
    if len(data_list) > 0:

        for data in data_list:
            print(f"num     : {data[0]}")
            print(f"title   : {data[1]}")
            print()
            print()

        while True:
            
            print("1.show_deail  2.add_board  3.back")
            print()
            
            try :
                show_mode_choice = int(input(">>>>>>"))
                if show_mode_choice == 1:
                    print("글번호를 입력하세요")
                    try:
                        detail_choice = int(input(">>>>>"))
                        
                        if detail_choice in range(1,len(data_list)+1): 
                            show_detail(detail_choice)
                        
                        else:
                            print("존재하지 않는 글입니다.")
                    except ValueError:
                            print("글을 다시 선택해주세요")  
                
                elif show_mode_choice ==2:
                    add_board()
                    break
                elif show_mode_choice == 3:
                    break
                else :
                    print("show_mode_choice 잘못입력하셨습니다.(1/2/3)")
                    print()
            except ValueError:
                print("show_mode_choice 숫자를 입력하세요")
                print()
    
    else:
        print("게시물이 존재하지 않습니다.")


#게시판 추가하기
def add_board():
    print()
    print("title을 입력하세요")
    title = input(">>>>>")
    print("content를 입력하세요")
    content = input(">>>>>")
    
    board = Board(title, content)
    data_object_list.append(board)
    save_board(board)


#게시판 저장하기
def save_board(board):
    new_board = board.set_csvtype()
    data_list.append(new_board)
    
    save_file = open("data.csv", "w", newline="", encoding="UTF-8-sig")
    writer = csv.writer(save_file)
    for data in data_list:
        writer.writerow(data)
    save_file.close()

실행구문

while True: #무한반복
    print()
    print("      Board")
    print("==================")
    print("1.view")
    print("2.add")
    print("3.exit")
    print()
    try :
        mode_choice = int(input(">>>>>>"))
        if mode_choice == 1:
            show_board()
            
        elif mode_choice ==2:
            add_board()
            
        elif mode_choice == 3:
            print("프로그램을 종료합니다.")
            print()
            break
        else :
            print("mode_choice 잘못입력하셨습니다.(1/2/3)")
            print()
    except ValueError:
        print("mode_choice 숫자를 입력하세요")
        print()
    






https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글