Skip to content

Instantly share code, notes, and snippets.

View sebastianknopf's full-sized avatar

Sebastian Knopf sebastianknopf

View GitHub Profile
@sebastianknopf
sebastianknopf / README.md
Created January 10, 2026 17:48
dependency free configuration utility for python

This configuraiton utility has three main purposes...

  1. Validate the given configuration for having all required keys
  2. Setting defined default values for optional keys
  3. Putting everything into the Configuration class

After running Configuration.apply_config(...), you simply can access your configs with Configuration.this.is.a.required.key or Configuration.this.is.an.optional.key.

@sebastianknopf
sebastianknopf / x10.py
Created November 27, 2025 20:48
helper class for reading / modifying / writing *.x10 files
import csv
import re
from typing import Iterable
########################################################################################################################
# Helper class for reading and modifying *.x10 files.
########################################################################################################################
def read_x10_file(filename, null_value: str = 'NULL', encoding: str = 'utf-8', filter: dict|None = None) -> "X10File":
@sebastianknopf
sebastianknopf / repeatedtimer.py
Created June 18, 2025 08:28
repeatedtimer.py
from threading import Timer
class RepeatedTimer(object):
def __init__(self, interval, function, *args, **kwargs):
self._timer = None
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
@sebastianknopf
sebastianknopf / basexml.py
Created May 19, 2025 15:32
Utility functions to work with objectified LXML data implemented in Python
import re
def exists(obj, path):
path = path.split('.')
level0 = path[0]
level1 = '.'.join(path[1:])
return obj is not None and hasattr(obj, level0) if len(path) == 1 else exists(getattr(obj, level0), level1) if hasattr(obj, level0) else False
@sebastianknopf
sebastianknopf / set-cover-gtfs.py
Last active May 13, 2025 10:06
Python implementation for a set-cover-problem: Which are the minimum stations to meet every trip of a GTFS dataset at least once?
import csv
import os
import re
import sys
from collections import defaultdict
from datetime import datetime
def reduce_ifopt(ifopt_id: str) -> str:
pattern = r"^[a-z]{2}:\d{5}:[\w\d]+(:[\w\d]+){0,2}$"
@sebastianknopf
sebastianknopf / datalog.py
Last active June 21, 2025 17:00
datalog.py
import json
import os
from datetime import datetime
from lxml.etree import fromstring
from lxml.etree import tostring
class Datalog:
@classmethod
@sebastianknopf
sebastianknopf / csv2ddb.py
Last active October 13, 2024 19:30
python helper script for memory efficient importing huge CSV files into a DuckDB database
import click
import csv
import duckdb
import polars
@click.command
@click.option('--file', '-f', help='Input CSV file')
@click.option('--db', '-d', help='DuckDB filename')
@click.option('--table', '-t', help='Destination table name to import the CSV file')
@click.option('--create-statement', '-c', default=None, help='Create statement filename for destination table')
@sebastianknopf
sebastianknopf / asc.py
Last active September 12, 2024 09:36
Python helper class to process *.asc files used in IVU.pool data for timetable exchange
import csv
import re
import os
from isa.ascdef import name2def
########################################################################################################################
# Helper class for reading and modifying *.asc files.
########################################################################################################################
@sebastianknopf
sebastianknopf / x10.py
Created August 1, 2024 08:41
Python helper class to process *.x10 files according to VDV-451
import csv
import re
########################################################################################################################
# Helper class for reading and modifying *.x10 files.
########################################################################################################################
def read_x10_file(filename):
x10_file = X10File()
x10_file.read(filename)
@sebastianknopf
sebastianknopf / offlinemaps.py
Created January 12, 2023 18:28
python script to fetch ZXY tiles from map servers
import os
import requests
import math
import zipfile
from optparse import OptionParser
# map server constants
MAP_SERVER_ADDRESS = '[YourMapServer]'
MAP_SERVER_USERNAME = ''