commit 94e99fba8573a3133a34a97f293b74734a247174 Author: Falko Zurell Date: Sun Nov 17 09:27:52 2024 +0100 first working version diff --git a/csv-to-ics.py b/csv-to-ics.py new file mode 100644 index 0000000..3b99989 --- /dev/null +++ b/csv-to-ics.py @@ -0,0 +1,66 @@ +import csv +import os +from ics import Calendar, Event +from datetime import datetime +import pytz + +def generate_ical_from_csv(csv_file): + # Generate the output .ics file name + ical_file = os.path.splitext(csv_file)[0] + '.ics' + + # Define CET time zone + cet = pytz.timezone('Europe/Berlin') # CET is commonly represented by Berlin + + # Create a new calendar + calendar = Calendar() + + # Read the CSV file + try: + with open(csv_file, mode='r', encoding='utf-8-sig', errors='replace') as file: + reader = csv.DictReader(file, delimiter=';') # Updated to use ';' as the delimiter + for row in reader: + try: + # Parse the data from CSV + host = row['Host'] + description = row['Description'] + date = row['Date'].strip() # Expected format: DD.MM.YYYY + start_time = row['start time'].strip() # Expected format: HH:MM + end_time = row['end time'].strip() # Expected format: HH:MM + location = row['Location'] + + # Combine date and time using the updated date format and apply CET + start_datetime = cet.localize(datetime.strptime(f"{date} {start_time}", "%d.%m.%Y %H:%M")) + end_datetime = cet.localize(datetime.strptime(f"{date} {end_time}", "%d.%m.%Y %H:%M")) + + # Create a new event + event = Event() + event.name = f"{description} (Host: {host})" # Include the host in the event name + event.begin = start_datetime + event.end = end_datetime + event.location = location + + # Add the event to the calendar + calendar.events.add(event) + + except Exception as e: + print(f"Error processing row: {row}. Error: {e}") + + # Write the calendar to an iCal file + with open(ical_file, mode='w', encoding='utf-8') as file: + file.writelines(calendar) + + print(f"iCal file created: {ical_file}") + + except Exception as e: + print(f"Failed to read CSV file: {csv_file}. Error: {e}") + +# Usage Example +if __name__ == "__main__": + # Ask the user for the CSV file + csv_file = input("Enter the path to the CSV file: ").strip() + + # Validate the file exists + if not os.path.isfile(csv_file): + print("The specified file does not exist. Please try again.") + else: + generate_ical_from_csv(csv_file)