def readLog(fname="workdays.csv",onlyAfter=datetime.datetime(year=2017,month=1,day=1)):
    """return a list of [stamp, project] elements."""
    with open(fname) as f:
        raw=f.read().split("\n")
    efforts=[] #date,nickname
    for line in raw[1:]:
        line=line.strip().split(",")
        date=datetime.datetime.strptime(line[0], "%Y-%m-%d")
        if onlyAfter and date<onlyAfter:
            continue
        if len(line)<3:
            continue
        for project in line[2:]:
            project=project.strip()
            if len(project):
                efforts.append([date,project])
    return efforts
def readLog(fname="workdays.csv",onlyAfter=datetime.datetime(year=2017,month=1,day=1)):
    """return a list of [stamp, project] elements."""
    with open(fname) as f:
        raw=f.read().split("\n")
    efforts=[] #date,nickname
    for line in raw[1:]:
        line=line.strip().split(",")
        date=datetime.datetime.strptime(line[0], "%Y-%m-%d")
        if onlyAfter and date<onlyAfter:
            continue
        if len(line)<3:
            continue
        for project in line[2:]:
            project=project.strip()
            if len(project):
                efforts.append([date,project])
    return efforts
def readLog ( fname = "workdays.csv" , onlyAfter = datetime . datetime ( year = 2017 , month = 1 , day = 1 ) ) : with open ( fname ) as f : raw = f . read ( ) . split ( "\n" ) efforts = [ ] #date,nickname
 for line in raw [ 1 : ] : line = line . strip ( ) . split ( "," ) date = datetime . datetime . strptime ( line [ 0 ] , "%Y-%m-%d" ) if onlyAfter and date < onlyAfter : continue if len ( line ) < 3 : continue for project in line [ 2 : ] : project = project . strip ( ) if len ( project ) : efforts . append ( [ date , project ] ) return efforts
return a list of [stamp, project] elements.
return a list of [ stamp project ] elements .