Can I print 2 calendars side by side?

Peter Otten __peter__ at web.de
Wed Nov 23 13:57:41 EST 2016


Dayton Jones wrote:

> I'd like to be able to display 2 calendars side by side, instead of
> stacked... is this possible?

I'm too lazy to look around for a ready-to-use solution, so here's my own:

$ cat side_by_side.py
from itertools import zip_longest

def zip_lines(*columns, sep="  "):
    columns = [c.splitlines() for c in columns]
    widths = [max(len(s) for s in c) for c in columns]
    return "\n".join(
        sep.join(c.ljust(w) for c, w in zip(row, widths))
        for row in zip_longest(*columns, fillvalue="")
    )

if __name__ == "__main__":
    import calendar

    print(zip_lines(calendar.month(2016, 1), calendar.month(2015, 1)))
    print()

    columns = [calendar.month(2016, month) for month in range(6, 9)]
    print(zip_lines(*columns, sep="  |  "))
$ python3 side_by_side.py 
    January 2016          January 2015    
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
             1  2  3            1  2  3  4
 4  5  6  7  8  9 10   5  6  7  8  9 10 11
11 12 13 14 15 16 17  12 13 14 15 16 17 18
18 19 20 21 22 23 24  19 20 21 22 23 24 25
25 26 27 28 29 30 31  26 27 28 29 30 31   

     June 2016        |       July 2016        |      August 2016     
Mo Tu We Th Fr Sa Su  |  Mo Tu We Th Fr Sa Su  |  Mo Tu We Th Fr Sa Su
       1  2  3  4  5  |               1  2  3  |   1  2  3  4  5  6  7
 6  7  8  9 10 11 12  |   4  5  6  7  8  9 10  |   8  9 10 11 12 13 14
13 14 15 16 17 18 19  |  11 12 13 14 15 16 17  |  15 16 17 18 19 20 21
20 21 22 23 24 25 26  |  18 19 20 21 22 23 24  |  22 23 24 25 26 27 28
27 28 29 30           |  25 26 27 28 29 30 31  |  29 30 31            





More information about the Python-list mailing list