Base de datos de contactos usando almacenamiento de archivos - Python Programming Exercise

En este ejercicio, desarrollarás un programa en Python que amplía la "base de datos de contactos" implementando la funcionalidad para cargar datos desde un archivo al inicio de cada sesión (si el archivo está presente). Este ejercicio es perfecto para practicar el manejo de archivos, la serialización de datos y la interacción con el usuario en Python. Al implementar este programa, obtendrás experiencia práctica en el manejo de operaciones de archivos, serialización de datos e interacción con el usuario en Python. Este ejercicio no solo refuerza tu comprensión del manejo de archivos, sino que también te ayuda a desarrollar prácticas de codificación eficientes para gestionar las interacciones con el usuario. Además, este ejercicio proporciona una excelente oportunidad para explorar la versatilidad de Python en aplicaciones del mundo real. Al trabajar con el manejo de archivos, la serialización de datos y la interacción con el usuario, aprenderás a estructurar tu código de manera eficiente, lo cual es una habilidad crucial en muchos escenarios de programación. Este ejercicio también te anima a pensar críticamente sobre cómo estructurar tu código para la legibilidad y el rendimiento, convirtiéndolo en una valiosa adición a tu portafolio de programación. Ya seas un principiante o un programador experimentado, este ejercicio te ayudará a profundizar tu comprensión de Python y mejorar tus habilidades para resolver problemas.

 Categoría

Administrar archivos

 Ejercicio

Base De Datos De Contactos Usando Almacenamiento De Archivos

 Objectivo

Desarrollar un programa Python que extienda la "base de datos de contactos" implementando una funcionalidad para cargar datos desde un archivo al inicio de cada sesión (si el archivo está presente). Además, debería guardar los datos en el archivo cuando finalice la sesión, lo que garantiza que cualquier cambio realizado durante la sesión esté disponible para la siguiente.

 Ejemplo de ejercicio de Python

 Copiar código Python
import os
import pickle

# Class to represent a Contact with name, phone, and email
class Contact:
    def __init__(self, name, phone, email):
        self.name = name  # Contact's name
        self.phone = phone  # Contact's phone number
        self.email = email  # Contact's email address

    # String representation of a contact
    def __str__(self):
        return f"Name: {self.name}, Phone: {self.phone}, Email: {self.email}"

# Class to manage the database of contacts
class ContactsDatabase:
    def __init__(self, file_name):
        self.file_name = file_name  # File name to load/save contacts
        self.contacts = []  # List to store contacts
        self.load_from_file()  # Load existing contacts from file (if any)

    # Method to add a new contact
    def add_contact(self, name, phone, email):
        new_contact = Contact(name, phone, email)  # Create a new Contact object
        self.contacts.append(new_contact)  # Add the contact to the list
        print(f"Contact {name} added.")  # Notify that the contact has been added

    # Method to list all contacts in the database
    def list_contacts(self):
        if not self.contacts:  # Check if there are no contacts
            print("No contacts available.")  # Inform the user that there are no contacts
        else:
            for contact in self.contacts:  # Loop through the list of contacts
                print(contact)  # Print each contact's details

    # Method to save the contacts list to a file
    def save_to_file(self):
        try:
            with open(self.file_name, 'wb') as file:  # Open the file in write-binary mode
                pickle.dump(self.contacts, file)  # Serialize and save the contacts list to the file
            print("Contacts saved successfully.")  # Notify that contacts have been saved
        except Exception as e:  # In case of an error while saving the file
            print(f"Error saving contacts: {e}")  # Print the error message

    # Method to load contacts from a file
    def load_from_file(self):
        if os.path.exists(self.file_name):  # Check if the file exists
            try:
                with open(self.file_name, 'rb') as file:  # Open the file in read-binary mode
                    self.contacts = pickle.load(file)  # Deserialize and load the contacts list from the file
                print("Contacts loaded successfully.")  # Notify that contacts have been loaded
            except Exception as e:  # In case of an error while reading the file
                print(f"Error loading contacts: {e}")  # Print the error message
        else:
            print("No previous contacts found. Starting fresh.")  # Inform that no previous data exists

# Main function to drive the program
def main():
    file_name = "contacts.pkl"  # Define the file name to store contacts
    db = ContactsDatabase(file_name)  # Create an instance of the ContactsDatabase class

    while True:  # Infinite loop to show the menu until the user exits
        print("\n--- Contacts Database ---")  # Displaying the menu options
        print("1. Add Contact")  # Option to add a new contact
        print("2. List Contacts")  # Option to list all contacts
        print("3. Exit")  # Option to exit the program

        choice = input("Choose an option: ")  # Get the user's choice

        if choice == '1':  # If the user chooses to add a contact
            name = input("Enter name: ")  # Prompt for the contact's name
            phone = input("Enter phone number: ")  # Prompt for the contact's phone number
            email = input("Enter email address: ")  # Prompt for the contact's email address
            db.add_contact(name, phone, email)  # Add the contact to the database
        elif choice == '2':  # If the user chooses to list contacts
            db.list_contacts()  # Display all the contacts
        elif choice == '3':  # If the user chooses to exit
            db.save_to_file()  # Save the current contacts to the file
            print("Exiting the program...")  # Notify that the program is exiting
            break  # Exit the loop and end the program
        else:
            print("Invalid choice. Please try again.")  # If the input is invalid, ask the user to try again

# Run the main function when the script is executed
if __name__ == "__main__":
    main()

 Output

--- Contacts Database ---
1. Add Contact
2. List Contacts
3. Exit
Choose an option: 1
Enter name: John Doe
Enter phone number: 123-456-7890
Enter email address: john.doe@example.com
Contact John Doe added.

--- Contacts Database ---
1. Add Contact
2. List Contacts
3. Exit
Choose an option: 2
Name: John Doe, Phone: 123-456-7890, Email: john.doe@example.com

--- Contacts Database ---
1. Add Contact
2. List Contacts
3. Exit
Choose an option: 3
Contacts saved successfully.
Exiting the program...

 Comparte este ejercicio de Python

 Más Ejercicios Programación Python de Administrar archivos

¡Explora nuestro conjunto de ejercicios de programación Python! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de Python. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en Python.

  •  Transformar un archivo de texto a mayúsculas

    En este ejercicio, desarrollarás un programa en Python que lee el contenido de un archivo de texto y lo escribe en un nuevo archivo, convirtiendo todas las letras min...

  •  Transformar cualquier contenido de archivo a mayúsculas

    En este ejercicio, desarrollarás un programa en Python que lee cualquier archivo y transfiere su contenido a otro archivo, convirtiendo todas las letras minúsculas en...

  •  Revertir el contenido de un archivo

    En este ejercicio, desarrollarás un programa en Python para "invertir" un archivo. Este ejercicio es perfecto para practicar el manejo de archivos, la manipula...

  •  Herramienta de cifrado de archivos

    En este ejercicio, desarrollarás un programa en Python para codificar el contenido de un archivo de texto en un nuevo archivo, transformando el texto de manera que no...

  •  Contador de palabras

    En este ejercicio, desarrollarás un programa en Python para contar el número total de palabras en un archivo de texto dado. Este ejercicio es perfecto para pra...

  •  Dimensiones BMP con BinaryReader

    En este ejercicio, desarrollarás un programa en Python para leer las dimensiones (ancho y alto) de un archivo BMP utilizando un enfoque similar a BinaryReader. Este ...