Python 从字符串中提取列表

Python 从字符串中提取列表,python,csv,Python,Csv,我通过Python从Google Adwords Reporting API中提取数据。我可以成功地提取数据,然后将其保存在变量数据中 data = get_report_data_from_google() type(data) str 以下是一个示例: data = 'ID,Labels,Date,Year\n3179799191,"[""SKWS"",""Exact""]",2016-05-16,2016\n3179461237,"[""SKWS"",""Broad""]",2016-

我通过
Python
从Google Adwords Reporting API中提取数据。我可以成功地提取数据,然后将其保存在变量数据中

data = get_report_data_from_google()

type(data)
str
以下是一个示例:

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'
我需要更多地处理这些数据,并最终输出一个经过处理的平面文件(Google Adwords API可以返回CSV,但我需要在将数据加载到数据库之前对其进行预处理)

如果我尝试将
数据
转换为
csv
对象,并尝试打印每行,则每行会得到一个字符,如下所示:

c = csv.reader(data, delimiter=',')

for i in c:
    print(i)

    ['I']
    ['D']
    ['', '']
    ['L']
    ['a']
    ['b']
    ['e']
    ['l']
    ['s']
    ['', '']
    ['D']
    ['a']
    ['t']
    ['e']
因此,我的想法是将每行的每一列处理成一个列表,然后将其添加到
csv
对象中。尝试:

for line in data.splitlines():
    print(line)

3179799191,"[""SKWS"",""Exact""]",2016-05-16,2016
我实际发现的是,在
str
中有一个列表:“[“SKWS”,“Exact”“。”

此值是一个“标签”

此列表的格式有点奇怪-它的值中有许多括号,因此尝试使用引号char,如“,将返回类似以下内容:[SKWS-Exact]。如果我可以访问[“SKWS”“Exact”“],这是可以接受的


str
中提取列表对象有没有好方法?有没有更好的方法来处理这些数据并将其输出到csv?

您需要先拆分字符串。
csv.reader
希望在每次迭代中都能像标准文件对象一样提供单行。如果您有一个包含新行的字符串,则sp用
拆分行()
在换行符上点亮它:


您需要首先拆分字符串。
csv.reader
希望在每次迭代中都能像标准文件对象那样提供单行。如果字符串中有换行符,请使用
splitlines()
在换行符上拆分它:


这与
csv.reader
的工作方式有关

根据文件:

csvfile可以是任何支持迭代器协议的对象,并且每次调用其
next()
方法时都返回一个字符串

这里的问题是,如果你传递一个字符串,它支持迭代器协议,并且每次调用到“代码”>下一个字符[1]时返回一个单独的字符。 您需要提供一个行列表,csv的每行一个。例如:

c = csv.reader(data.split(), delimiter=',')
for i in c:
    print i

# ['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']

现在,您的列表看起来像一个JSON列表。您可以使用
JSON
模块来读取它。

这与
csv.reader
的工作方式有关

根据文件:

csvfile可以是任何支持迭代器协议的对象,并且每次调用其
next()
方法时都返回一个字符串

这里的问题是,如果你传递一个字符串,它支持迭代器协议,并且每次调用到“代码”>下一个字符[1]时返回一个单独的字符。 您需要提供一个行列表,csv的每行一个。例如:

c = csv.reader(data.split(), delimiter=',')
for i in c:
    print i

# ['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']

现在,您的列表看起来像一个JSON列表。您可以使用
JSON
模块来读取它。

一般来说,Web服务返回JSON或XML就是出于这个原因,因为这些格式可以很容易地转换为Python字典。您是否尝试过将API响应解析为JSON?您需要帮助吗?您可以具体说明如何或从何处返回JSON或XML吗获取该数据?通常,Web服务返回JSON或XML正是出于这个原因,因为这些格式可以很容易地转换为Python字典。您是否尝试过将API响应解析为JSON?您需要帮助吗?您能否说明如何或从何处获取该数据?此外,您还应该添加
标签=json.loads(第[1]行)
。要添加到这一点,您应该使用
labels=json.loads(第[1]行)