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]行)
。