A Python library for loading and manipulating GTFS (General Transit Feed Specification) data with schema validation and type safety.
- 📦 Load GTFS feeds from directories
- ✅ Schema validation with type checking
- 🔄 Modify and patch GTFS data
- 🚀 Support for standard GTFS and Transit's itinerary format
- 📝 CSV and GeoJSON file type support
- 🔗 Cross-referenced entities for easy data navigation
pip install py-gtfs-loaderOr using uv:
uv add py-gtfs-loaderimport gtfs_loader
# Load a GTFS feed
gtfs = gtfs_loader.load('path/to/gtfs/directory')
# Access data by entity
stop = gtfs.stops['stop_id']
route = gtfs.routes['route_id']
trip = gtfs.trips['trip_id']
# Access grouped entities
stop_times = gtfs.stop_times['trip_id'] # Returns list of stop times for a trip# Modify data
gtfs.stops['stop_id'].stop_name = "New Stop Name"
# Save changes back to disk
gtfs_loader.patch(gtfs, 'path/to/input', 'path/to/output')# Load only specific files
gtfs = gtfs_loader.load('path/to/gtfs', files=['stops', 'routes', 'trips'])# Load Transit itinerary format (itinerary_cells.txt)
gtfs = gtfs_loader.load('path/to/gtfs', itineraries=True)This project uses uv for dependency management.
# Install dependencies
uv sync --all-extras --dev
# Run tests
uv run pytest .
# Run linting
uv run flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics- Python ≥ 3.10
- Development dependencies: pytest, flake8
gtfs_loader/- Main package__init__.py- Load/patch functionsschema.py- GTFS entity definitionsschema_classes.py- Schema metadata systemtypes.py- Custom GTFS types (GTFSTime, GTFSDate, Entity)lat_lon.py- Geographic utilities
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
- Jonathan Milot
- Jeremy Steele