如何在Python中以CSV格式提取API数据

时间:2016-12-23 16:30:06

标签: python api csv

我从API端点提取数据。我的回答如下:

b'col1;col2;col3;a1;a2;a3\r\nb1;b2;b3\r\n'

我想将响应格式设置为:

col1  col2  col3
 a1    a2    a3
 b1    b2    b3

为了使事情进一步复杂化,这是我列表中一个输入的响应。我需要这个循环并重复多个输入。

这是我到目前为止所尝试的:

dict = {}
dict[1] = "input1"
dict[2] = "input2"
base_url = "ex.com/?key=abc&input={}"
df = pandas.read_csv('out.csv', Header = None) 

for input in dict:
    url1=base_url.format(input)
    response1 = requests.get(url1)

现在我知道for循环是不完整的 - 不确定使用哪个函数来附加数据并使其格式正确。我是Python的新手 - 即使你指导我选择正确的研究功能,这也会有所帮助。

2 个答案:

答案 0 :(得分:1)

我认为col1;col2;col3;a1;a2;a3

中应该有换行符

但如果没有,这是一个可能的解决方案

s = b'col1;col2;col3;a1;a2;a3\r\nb1;b2;b3\r\n'.decode('utf-8')

table = []
cols = 3
for i, row in enumerate(s.split()):
  data = row.split(';')

  # If first line, or data is longer than specified columns
  if i == 0 or len(data) > cols:
    # Try to take column sized chunks
    table.append('\t'.join(data[:cols]))
    table.append('\t'.join(data[cols:]))
  else:
    table.append('\t'.join(data))

print('\n'.join(table))

输出

col1    col2    col3
a1      a2      a3
b1      b2      b3

就字典的循环而言,我只想要值,所以只需循环遍历列表。我对pandas不够熟悉,但您可以继续在循环中向这个table列表追加行,您可以担心以后获取数据帧或输出到文件。

答案 1 :(得分:0)

考虑StringIO将文本内容读取到read_table的数据框,并指定分号分隔符。以下假设响应的换行符落在包含标题的列之间:b'col1;col2;col3\r\na1;a2;a3\r\nb1;b2;b3\r\n'。此外,每个数据框都附加到列表中,并在末尾连接在一起以形成最终数据帧:

from io import StringIO
import pandas as pd 

inputList = ['input1', 'input2']
base_url = "ex.com/?key=abc&input={}"
dfList = []    

for input in inputList: 
    url1 = base_url.format(input) 
    response1 = requests.get(url1)
    temp = pd.read_table(StringIO(response1.decode('utf-8')), sep=';')
    dfList.append(temp)

finaldf = pd.concat(dfList)