Created
April 5, 2014 19:48
-
-
Save ian-weisser/9997196 to your computer and use it in GitHub Desktop.
Test a GTFS file's calendar and calendar_dates tables for a specific date (like today)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
""" | |
Check a GTFS file's calendar and calendar_dates tables. | |
Return True if the dates are current or future. | |
Return False if all dates are in the past and the GTFS file | |
can be safely deleted. | |
This is a working example. Try it. Edit the path to match your GTFS file. | |
""" | |
import zipfile | |
def valid_dates(gtfs_path_and_file, date_string): | |
""" | |
Check a GTFS file's calendar and calendar_dates tables. | |
If all valid dates are in the past, return False. | |
If any valid dates include the date string or the future, return True. | |
Date string is format YYYYMMDD, just like GTFS dates. | |
""" | |
gtfs_zipfile = zipfile.ZipFile(gtfs_path_and_file, mode='r') | |
valid = False | |
if 'calendar.txt' in gtfs_zipfile.namelist(): | |
cal_string = gtfs_zipfile.read('calendar.txt').decode('utf-8') | |
cal_lines = cal_string.split('\r\n') | |
del cal_lines[0] # Delete the header row | |
for line in cal_lines: | |
if len(line.split(',')) < 9: | |
continue | |
start_date = int(line.split(',')[8]) | |
end_date = int(line.split(',')[9]) | |
if start_date >= int(date_string) \ | |
or end_date >= int(date_string): | |
valid = True | |
break | |
elif 'calendar_dates.txt' in gtfs_zipfile.namelist(): | |
cal_string = gtfs_zipfile.read('calendar_dates.txt').decode('utf-8') | |
cal_lines = cal_string.split('\r\n') | |
del cal_lines[0] # Delete the header row | |
for line in cal_lines: | |
if len(line.split(',')) < 3: | |
continue | |
date = line.split(',')[1] | |
if date >= date_string: | |
valid = True | |
break | |
gtfs_zipfile.close() | |
return valid | |
if __name__ == "__main__": | |
GTFS_FILE = '/var/cache/gtfs/Milwaukee County Transit System/20140401.gtfs' | |
TODAY = '20140331' | |
print(valid_dates(GTFS_FILE, TODAY)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment