Looking to get right to work with the data? Check out the cleaned dataset on Kaggle: California Traffic Collision Data from SWITRS
SWITRS-to-SQLite is a Python 3 script that converts the CSV files from the California Highway Patrol's Statewide Integrated Traffic Records System (SWITRS) into an SQLite database.
Note: CHP shut down iSWITRS on January 8, 2025 and replaced it with the California Crash Reporting System (CCRS). This tool works with the legacy SWITRS CSV format (
CollisionRecords.txt,PartyRecords.txt,VictimRecords.txt). CCRS uses a different file layout; support for it is planned for a future release.
This repository follows SemVer. I will increment the MAJOR version if a change is backwards incompatible for either the Python command line or the structure of the output database.
The best way to install SWITRS-to-SQLite is with pip:
pip install switrs-to-sqliteOr with UV:
uv tool install switrs-to-sqliteThis will give you access to the script simply by calling:
switrs_to_sqlite --helpFor development, clone the repository and use UV to sync the environment (this handles the local package installation automatically):
git clone https://github.com/agude/SWITRS-to-SQLite.git
cd SWITRS-to-SQLite
uv sync --devSWITRS-to-SQLite requires Python 3.10+.
Using SWITRS-to-SQLite is simple; just point it to the unzipped files from SWITRS and it will run the conversion:
switrs_to_sqlite \
CollisionRecords.txt \
PartyRecords.txt \
VictimRecords.txtThe script also supports reading gziped records files:
switrs_to_sqlite \
CollisionRecords.txt.gz \
PartyRecords.txt.gz \
VictimRecords.txt.gzThe conversion takes about 10 minutes for a full-sized dump. The database is
saved by default to a file named switrs.sqlite3. The output file can be
changed as follows:
switrs_to_sqlite \
CollisionRecords.txt \
PartyRecords.txt \
VictimRecords.txt \
-o new_db_file.sqlite3The program provides the following help menu when called with --help:
usage: switrs_to_sqlite [-h] [--version] [-p {strict,ignore,replace}]
[-o OUTPUT_FILE]
collision_record party_record victim_record
Convert SWITRS text files to a SQLite3 database
positional arguments:
collision_record the CollisionRecords.txt file or the same file gzipped
party_record the PartyRecords.txt file or the same file gzipped
victim_record the VictimRecords.txt file or the same file gzipped
options:
-h, --help show this help message and exit
--version show program's version number and exit
-p {strict,ignore,replace}, --parse-error {strict,ignore,replace}
how to handle unicode decoding errors in input files:
'strict' raises an error (default), 'ignore' skips
invalid characters, 'replace' substitutes a
replacement character
-o OUTPUT_FILE, --output-file OUTPUT_FILE
file to save the database to
SWITRS-to-SQLite uses pytest to run unit tests (contained in the tests
folder). To run the tests:
uv run pytest -vvOr with just:
just testRun just with no arguments to see all available commands.