Extract list from a string
Question: I am extracting data from the Google Adwords Reporting API via `Python`. I can
successfully pull the data and then hold it in a variable data.

    
    
    data = get_report_data_from_google()
    
    type(data)
    str
    

Here is a sample:

    
    
    data = 'ID,Labels,Date,Year\n3179799191,"[""SKWS"",""Exact""]",2016-05-16,2016\n3179461237,"[""SKWS"",""Broad""]",2016-05-16,2016\n3282565342,"[""SKWS"",""Broad""]",2016-05-16,2016\n'
    

I need to process this data more, and ultimately output a processed flat file
(Google Adwords API can return a CSV, but I need to pre-process the data
before loading it into a database.).

If I try to turn `data` into a `csv` object, and try to print each line, I get
one character per line like:

    
    
    c = csv.reader(data, delimiter=',')
    
    for i in c:
        print(i)
    
        ['I']
        ['D']
        ['', '']
        ['L']
        ['a']
        ['b']
        ['e']
        ['l']
        ['s']
        ['', '']
        ['D']
        ['a']
        ['t']
        ['e']
    

So, my idea was to process each column of each line into a list, then add that
to a `csv` object. Trying that:

    
    
    for line in data.splitlines():
        print(line)
    
    3179799191,"[""SKWS"",""Exact""]",2016-05-16,2016
    

What I actually find is that inside of the `str`, there is a list:
"[""SKWS"",""Exact""]"

This value is a "label"
[documentation](https://developers.google.com/adwords/api/docs/appendix/reports/adgroup-
performance-report#labels)

This list is formatted a bit weird - it has numerous parentheses in the value,
so trying to use a quote char, like ", will return something like this: [ SKWS
Exact ]. If I could get to [""SKWS"",""Exact""], that would be acceptable.

Is there a good way to extract a list object within a `str`? Is there a better
way to process and output this data to a csv?


Answer: You need to split the string first. `csv.reader` expects something that
provides a single line on each iteration, like a standard file object does. If
you have a string with newlines in it, split it on the newline character with
`splitlines()`:

    
    
    >>> import csv
    >>> data = 'ID,Labels,Date,Year\n3179799191,"[""SKWS"",""Exact""]",2016-05-16,2016\n3179461237,"[""SKWS"",""Broad""]",2016-05-16,2016\n3282565342,"[""SKWS"",""Broad""]",2016-05-16,2016\n'
    >>> c = csv.reader(data.splitlines(), delimiter=',')
    >>> for line in c:
    ...     print(line)
    ...
    ['ID', 'Labels', 'Date', 'Year']
    ['3179799191', '["SKWS","Exact"]', '2016-05-16', '2016']
    ['3179461237', '["SKWS","Broad"]', '2016-05-16', '2016']
    ['3282565342', '["SKWS","Broad"]', '2016-05-16', '2016']
    

