Categories We Write About

Build an eBook organizer

Here is a simple implementation of an eBook Organizer using Python. It allows you to add, remove, search, and list eBooks by title, author, genre, and status (e.g., “read”, “unread”).

python
import json import os class EBook: def __init__(self, title, author, genre, status="unread"): self.title = title self.author = author self.genre = genre self.status = status def to_dict(self): return { "title": self.title, "author": self.author, "genre": self.genre, "status": self.status } class EBookOrganizer: def __init__(self, storage_path="ebooks.json"): self.storage_path = storage_path self.ebooks = self.load_ebooks() def load_ebooks(self): if not os.path.exists(self.storage_path): return [] with open(self.storage_path, "r") as f: return json.load(f) def save_ebooks(self): with open(self.storage_path, "w") as f: json.dump(self.ebooks, f, indent=4) def add_ebook(self, ebook): self.ebooks.append(ebook.to_dict()) self.save_ebooks() def remove_ebook(self, title): self.ebooks = [e for e in self.ebooks if e["title"].lower() != title.lower()] self.save_ebooks() def list_ebooks(self, status_filter=None): for ebook in self.ebooks: if status_filter and ebook["status"] != status_filter: continue print(f"Title: {ebook['title']}, Author: {ebook['author']}, Genre: {ebook['genre']}, Status: {ebook['status']}") def search_ebook(self, keyword): results = [e for e in self.ebooks if keyword.lower() in e["title"].lower() or keyword.lower() in e["author"].lower()] for ebook in results: print(f"Title: {ebook['title']}, Author: {ebook['author']}, Genre: {ebook['genre']}, Status: {ebook['status']}") def update_status(self, title, new_status): for ebook in self.ebooks: if ebook["title"].lower() == title.lower(): ebook["status"] = new_status break self.save_ebooks() # Example usage if __name__ == "__main__": organizer = EBookOrganizer() while True: print("nEBook Organizer") print("1. Add eBook") print("2. Remove eBook") print("3. List all eBooks") print("4. Search eBook") print("5. Update eBook status") print("6. Exit") choice = input("Choose an option: ") if choice == "1": title = input("Enter title: ") author = input("Enter author: ") genre = input("Enter genre: ") status = input("Enter status (read/unread): ") ebook = EBook(title, author, genre, status) organizer.add_ebook(ebook) elif choice == "2": title = input("Enter the title of the eBook to remove: ") organizer.remove_ebook(title) elif choice == "3": status_filter = input("Filter by status (leave blank for all): ") organizer.list_ebooks(status_filter if status_filter else None) elif choice == "4": keyword = input("Enter keyword to search: ") organizer.search_ebook(keyword) elif choice == "5": title = input("Enter title of the eBook to update: ") new_status = input("Enter new status (read/unread): ") organizer.update_status(title, new_status) elif choice == "6": break else: print("Invalid choice. Please try again.")

Features:

  • Add new eBooks with metadata.

  • Remove eBooks by title.

  • List all or filtered by read status.

  • Search eBooks by title or author.

  • Update eBook status.

You can expand it to support categories, cover images, tags, file paths, or even integrate a GUI using Tkinter or PyQt. Let me know if you’d like a web-based version or a desktop GUI instead.

Share This Page:

Enter your email below to join The Palos Publishing Company Email List

We respect your email privacy

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories We Write About