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”).
pythonimport 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.
Leave a Reply