본문 바로가기
코딩 연습/파이썬 기초(예제)

북마크 관리 프로그램 코딩, 엑셀 생성 관리 [파이썬기초(예제)]

by good4me 2022. 4. 17.

goodthings4me.tistory.com

파이썬으로 북마크(즐겨찾기) 관리 프로그램을 연습해봤다. 북마크 클래스를 만들어서 객체를 생성해 사용하는 방식으로 구현했으며, db 대신 엑셀 파일을 생성하여 입력한 북마크 내용을 저장할 수 있도록 했다.

 

 

본 프로그램을 장고(django) 웹 프레임워크 환경에 적용하고 엑셀 대신에 sqlite3나 mysql 등을 활용하면 북마크 웹 프로그램이 구현될 것임

 

[소스코드]

# Bookmark 클래스

import os
import openpyxl

class Bookmark:
    def __init__(self):
        self.sitename = ''
        self.title = 0
        self.url = ''
        self.bookmark_lst = ''  # 입력값 리스트


    def bookmark_set(self, sitename, title, url):
        self.sitename = sitename
        self.title = title
        self.url = url
        self.bookmark_lst = [self.sitename, self.title, self.url]
        return self.bookmark_lst
    

    def save_csv(self, response):
        # 입력값을 저장(y)할 경우만 엑셀파일 접속
        # self.bookmark_lst는 저장 여부에 상관없이 초기화되어야 함
        if response == 'y':
            if not os.path.isfile('./bookmark_db.xlsx'):
                bookmark_wb = openpyxl.Workbook()
                bookmark_ws = bookmark_wb.active
                bookmark_ws.append(['Sitename', 'Title', 'Url'])
                bookmark_wb.save('./bookmark_db.xlsx')
                bookmark_wb.close()

            add_bookmark_wb = openpyxl.load_workbook('./bookmark_db.xlsx')
            add_bookmark_ws = add_bookmark_wb.active
            row = add_bookmark_ws.max_row

            try:
                for col in range(1, add_bookmark_ws.max_column + 1):
                    add_bookmark_ws.cell(row + 1, col).value = self.bookmark_lst[col-1]
                add_bookmark_wb.save('./bookmark_db.xlsx')
                add_bookmark_wb.close()
                self.bookmark_lst = ''
            except:
                print('저장 에러 발생!!\n')
                self.bookmark_lst = ''
                return False
            return 'Save Success'
            
        elif response == 'n':
            print('저장 취소\n')
            self.bookmark_lst = ''
            return False


    def bookmark_get(self):
        read_bookmark_wb = openpyxl.load_workbook('./bookmark_db.xlsx', data_only=True)
        read_bookmark_ws = read_bookmark_wb.active
        print(f'입력 자료 출력\n{"="*20}')
        for row_idx in range(1, read_bookmark_ws.max_row):
            for col in read_bookmark_ws.iter_cols(min_col=1, max_col=read_bookmark_ws.max_column):  # col= A, B, C,...
                print(col[row_idx].value)
            print()
        return True
  • 객체 속성(변수)를 이용하여 데이터(사이트명, 글 제목, URL)를 입력 받고(bookmark_set() 메서드),
  • 입력된 값을 엑셀에 저장하기 전에 리스트로 추가(self.bookmark_lst 변수)하고,
  • 엑셀에 저장할 때 엑셀 파일이 없으면 파일을 생성한 후 데이터를 저장(save_csv() 메서드)한다.
  • bookmark_get() 메서드는 엑셀에 있는 데이터 전체를 터미널에 출력해준다.

 

good4me.co.kr

 

 

# 객체 생성 및 메서드 호출

if __name__ == '__main__':
    
    input_people = Bookmark()
    insert_cnt = 1
    while True:
        try:
            num = int(input('\n즐겨찾기(Bookmark)로 입력할 URL수는..? '))
        except:
            print('숫자를 입력하세요!')
            continue
        
        while insert_cnt <= num:
            sitename = input('URL 이름: ')
            title = input('글 제목: ')
            url = input('URL(주소): ')
            # 객체 메서드 호출
            result = input_people.bookmark_set(sitename, title, url)
            print(f'\n입력 자료[{insert_cnt}]:')
            for n in result:
                print(n)

            while True:
                response = input('\n입력 자료 저장할까요?("y or n"): ')
                if response in('y', 'Y'):
                    save_result = input_people.save_csv(response.lower())
                    print(save_result, '\n')
                    break
                elif response in('n', 'N'):
                    save_result = input_people.save_csv(response.lower())
                    break
                else:
                    print('잘 못 누르셨어요!\n')
                    continue

            if save_result:
                insert_cnt += 1

        if insert_cnt > num:
            input_people.bookmark_get()
            break

    print('\n프로그램이 종료되었습니다!')
  • 입력할 북마크 개수를 설정하고 입력을 하게 한다.
  • 사이트 이름, 글 제목, 주소(URL)을 입력받는다.
  • 입력한 내용을 다시 보여 주고, 저장 여부를 묻는다. 이때 'y' or 'n'에 대해 lower() 함수로 소문자로 만들어 호출하는 객체의 인자로 보내고, 객체 내부에서는 'y'인 경우만 엑셀에 저장하고, 저장하지 않으면 '저장 취소'를 출력하고 다시 입력하게 한다.
  • 마지막으로 설정한 개수만큼 북마크가 입력되면 bookmark_get() 메서드를 호출하여 엑셀에 저장된 북마크 데이터 전체를 출력하고 반복문을 탈출하여 프로그램을 종료한다. 

 

[실행 결과]

# 엑셀 파일(bookmark_db.xlsx)이 이미 생성되어 북마크 데이터가 있는 상태에서 실행

기존 엑셀 파일 데이터
기존 엑셀 파일 데이터

겨찾기(Bookmark)로 입력할 URL수는..? 2
URL 이름: goo44me
글 제목: 스마트스토어 상품 리뷰 추출하기 - 파이썬
 크롤링 연습
URL(주소): https://goodthings4me.tistory.com/732

입력 자료[1]:
goo44me
스마트스토어 상품 리뷰 추출하기 - 파이썬 크롤링 
연습
https://goodthings4me.tistory.com/732

입력 자료 저장할까요?("y or n"): y
Save Success 

URL 이름: good4me
글 제목: 숫자 뽑기 게임 - 파이썬 Tkinter로 구현
URL(주소): https://goodthings4me.tistory.com/725

입력 자료[2]:
good4me
숫자 뽑기 게임 - 파이썬 Tkinter로 구현
https://goodthings4me.tistory.com/725 

입력 자료 저장할까요?("y or n"): ㅜ   
잘 못 누르셨어요!


입력 자료 저장할까요?("y or n"): n
저장 취소 

URL 이름: good4me
글 제목: 온채널 엑셀폼 다운로드 - 업무자동화 프로
그램
URL(주소): https://goodthings4me.tistory.com/714

입력 자료[2]:
good4me
온채널 엑셀폼 다운로드 - 업무자동화 프로그램
https://goodthings4me.tistory.com/714       

입력 자료 저장할까요?("y or n"): y
Save Success 

입력 자료 출력
====================
보람에
파이썬 관련 코딩 연습한 목록 정리
https://blog.naver.com/borame365/222702307617

good4me
[파이썬기초(예제)] 김밥 주문 계산하기        
https://goodthings4me.tistory.com/733

goo44me
스마트스토어 상품 리뷰 추출하기 - 파이썬 크롤링  
연습
https://goodthings4me.tistory.com/732

good4me
온채널 엑셀폼 다운로드 - 업무자동화 프로그램     
https://goodthings4me.tistory.com/714


프로그램이 종료되었습니다!

(venv) D:\pythonDev>

 

북마크 데이터가 추가됨
북마크 데이터가 추가됨

 

 

▷ 객체 관련 자료 더보기>>

 

 

 

[python] 클래스(class)와 객체(object) 이해하기

파이썬 클래스(class)와 객체(object) 이해하기 ■ 함수로 아빠 나이를 관리하는 간단한 프로그램을 작성하면, # Father Age 관리 프로그램 fa_age = 39 # 전역변수 def up_fa_age(): global fa_age # 전역변수 사..

goodthings4me.tistory.com

 

 

 

[python] 파이썬 클래스와 객체의 본질, 그리고 독특한 특성

■ 객체 변수의 선언과 초기화 # 아래 클래스에서 메서드 정의만 보이고 변수 선언은 없지만, 파이썬은 객체에 필요한 변수 i를 알아서 생성해준다. i변수가 생성되는 시점은 객체 내에서 해당

goodthings4me.tistory.com

 

 

[python] 파이썬의 변수, 객체, 그리고 참조 주소

■ 파이썬에서 모든 자료(type)는 객체이기 때문에 변수에 객체를 대입하면 특정 메모리 주소를 할당받게 되고, 그 변수를 다른 변수에 대입하면 같은 객체 주소를 참조하게 된다. ■ 파이썬의 기

goodthings4me.tistory.com

 

댓글