Simpler way to break a list of comma separated values into many lists in Python 3 I have a file codereview_stats.txt which has data in the following format. The date at the top represents the last date at which data was written in the file and is there for the way I am collecting the data.
18-09-2013
dd-mm-yyyy, questions, answers, %answered, users, visitors/day

15-09-2013,9381,15913,88,26972,8466
16-09-2013,9413,15949,88,27015,8466
17-09-2013,9426,15968,88,27041,8871
18-09-2013,9439,15995,88,27082,8934

I am using matlotlib to plot the data. But before doing that I need to separate the dates, questions, answers etc. into separate lists. Currently I am doing that in the get_data()function as shown below. As you can see there are many list comprehensions here. Is there a simpler way to separate the data into many lists?
#! python3
from  matplotlib import pyplot as plt
from datetime import datetime as dt

def get_data():
    with open('codereview_stats.txt') as f:
data = [line for line in f]

    data = [line[:-1].split(',') for line in data[3:]]

    dates = [dt.strptime(line[0], '%d-%m-%Y') for line in data]
    ques = [int(line[1]) for line in data]
    ans =  [int(line[2]) for line in data]
    perc = [int(line[3]) for line in data]
    users = [int(line[4]) for line in data]
    visits = [int(line[5]) for line in data]

    return dates, ques, ans, perc, users, visits


def show_plot(dates, ques, ans, perc, users, visits):
    plt.plot_date(dates, visits, '.', linestyle = '-')
    plt.grid(True)
    plt.setp(plt.xticks()[1], rotation=30)
    plt.show()


show_plot(*get_data())


zip() in conjunction with the * operator can be used to unzip a list:
>>> strs="""15-09-2013,9381,15913,88,26972,8466
... 16-09-2013,9413,15949,88,27015,8466
... 17-09-2013,9426,15968,88,27041,8871
... 18-09-2013,9439,15995,88,27082,8934"""
>>> lis = [line.rstrip().split(',') for line in strs.splitlines()]
>>> dates, ques, ans, perc, users, visits = zip(*lis)
>>> dates
('15-09-2013', '16-09-2013', '17-09-2013', '18-09-2013')
>>> ques
('9381', '9413', '9426', '9439')
...


The stdlib provides the csv module to read comma separated files.
And there's the DictReader class that does what you want:

class csv.DictReader(csvfile, fieldnames=None, restkey=None,
  restval=None, dialect='excel', *args, **kwds)
Create an object which operates like a regular reader but maps the information read into a dict whose keys are given by the optional
  fieldnames parameter. If the fieldnames parameter is omitted, the
  values in the first row of the csvfile will be used as the fieldnames.
  If the row read has more fields than the fieldnames sequence, the
  remaining data is added as a sequence keyed by the value of restkey.
  If the row read has fewer fields than the fieldnames sequence, the
  remaining keys take the value of the optional restval parameter. Any
  other optional or keyword arguments are passed to the underlying
  reader instance.

Here's how it may look like in your application snippet (untested):
import csv

def get_data():
    d = csv.DictReader('codereview_stats.txt',
['dates', 'ques', 'ans', 'perc', 'users', 'visits'])
    return d['dates'], d['ques'], d['ans'], d['perc'], d['users'], d['visits']

Personally, I'd change the code to just pass around the dict object d.
Your code to type convert the string is still required somewhere. Here's an answer on how to subclass DictReader to infer types on the columns.