#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pandas from dep_analysis import readdepcsv, linedict, linedictstr from json import dumps from datetime import timedelta def rowspan(e): return (1 if not e else sum(rowspan(x[1]) for x in e)) def ausfallarray(lines): a = [] count = 0 datecount = {} for line in sorted(lines): a_l = [["'''" + line + "'''"], []] for direction in sorted(lines[line]): a_d = [["'''" + direction + "'''"], []] for stop in sorted(lines[line][direction], key=lambda x: min(lines[line][direction][x])): a_s = [[stop], []] for deptime in sorted(lines[line][direction][stop]): count += 1 a_t = [[deptime], []] for seendate in sorted(lines[line][direction][stop][deptime]): if seendate not in datecount: datecount[seendate] = 0 datecount[seendate] += 1 seentimes = list([s[0] for s in sorted(lines[line][direction][stop][deptime][seendate])]) a_sd = [[seendate, ", ".join(seentimes)], []] a_t[1].append(a_sd) a_s[1].append(a_t) a_d[1].append(a_s) a_l[1].append(a_d) a.append(a_l) return a, count, datecount def tableatext(a, i, labels): text = "" for x, y in a: text += str(rowspan(y)) + " " text += "-"*i for ei, ex in enumerate(x): text += "\""+labels[i][ei]+"\": " + str(ex) if ei < len(x) - 1: text += " | " else: text += "\n" if y: text += tableatext(y, i+1, labels) return text def tablerows(a, tfirstpre=""): text = "" for x in a: rs = rowspan(x[1]) # ändern! if tfirstpre: prerowspan = (f" rowspan=\"{rs}\"" if rs > 1 else "") pre = ((tfirstpre + prerowspan + " | ") if tfirstpre or prerowspan else "") for i, y in enumerate(x[0]): text += "| " + (pre if not i else "") + str(y) + "\n" else: for y in x[0]: text += "| " + (f" rowspan=\"{rs}\" | " if rs > 1 else "") + str(y) + "\n" if x[1]: text += tablerows(x[1]) else: text += "|-\n" return text def wikitable(a, ttitle, tref, tcols, tfirstpre="", tclass="wikitable sortable mw-collapsible mw-collapsed", tstyle="width:100%; text-align:left; font-size:90%;", theadclass="hintergrundfarbe6"): wikitext = "{| class=\"" + tclass + "\" style=\"" + tstyle + "\"\n|-\n" wikitext += "|+ " + ttitle + tref + "\n|- class=\"" + theadclass + "\"\n" for colname, colsort in tcols: wikitext += "! " if colsort: if colsort == "unsortable": wikitext += "class=\"unsortable\" | " else: wikitext += "data-sort-type=\"" + colsort + "\" | " wikitext += colname + "\n" wikitext += "\n|-\n" wikitext += tablerows(a, tfirstpre) wikitext += "\n|}\n" return wikitext if __name__ == "__main__": infilename = "./deps.csv" outfilename = "./deps-wiki.txt" lines = linedict(readdepcsv(infilename)) a, count, datecount = ausfallarray(lines) # print(dumps(a), end="\n\n") # print(tableatext(a, 0, (("Linie",), ("Richtung",), ("Haltestelle",), ("Abfahrtszeit",), ("Datenabfragetage", "Datenabfragezeitpunkte"))), end="\n\n") #''' tref = "" # name, sort type/unsortable linientcols = (("Linie", "text"), ("Richtung", "text"), ("Haltestelle", "text"), ("Abfahrtszeit", "number"), ("Datenabfragetage", "number"), ("Datenabfragezeitpunkte", "number"), ) linienfirstpre = "align=\"center\" style=\"background-color:#B404AE; color:white;\"" wikitext = f"Dargestellt werden gesammelte Fahrtausfälle im Netz der Hagener Straßenbahn AG ab {min(datecount, default='-')}.\n\n" wikitext += f"Gesamtanzahl ausgefallener Abfahrten: {sum([c for d, c in datecount.items()])}\n\n" wikitext += f"tagesübergreifend: {count}\n\n\nnach Tag:\n\n" for date, dc in sorted(datecount.items()): wikitext += f"{date}: {dc}\n\n" wikitext += "\n\n== Ausfälle ==\n\n" wikitext += wikitable(a, "Ausfälle", tref, linientcols, linienfirstpre) # print(wikitext, end="\n\n") with open(outfilename, 'w', encoding='utf-8') as f: f.write(wikitext) #print(f"File {outfilename} written") #'''