first working version
This commit is contained in:
commit
94e99fba85
1 changed files with 66 additions and 0 deletions
66
csv-to-ics.py
Normal file
66
csv-to-ics.py
Normal file
|
@ -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)
|
Loading…
Reference in a new issue