Python流式API数据输出,如何将其保存为CSV?

3

我正在尝试使用流数据 API 并将所有这些数据作为字典输出,但现在怎么办?如何转储到 CSV 文件中以便进行进一步处理?

# Initialize the `StreamingApiClient` service.
streaming_api_service = td_client.streaming_api_client()

# Stream equity bars
streaming_services.chart(
    service=ChartServices.ChartEquity,
    symbols=['QQQ'],
    fields=ChartEquity.All
)

# Start Streaming.
streaming_api_service.open_stream()

实时输出到终端:

{'data': [{'command': 'SUBS',
           'content': [{'1': 309.29,
                        '2': 309.29,
                        '3': 309.27,
                        '4': 309.27,
                        '5': 2.0,
                        '6': 611,
                        '7': 1654636260000,
                        '8': 19150,
                        'key': 'QQQ',
                        'seq': 538}],
           'service': 'CHART_EQUITY',
           'timestamp': 1654636324096}]}

这个输出每分钟更新一次,直到脚本终止。我该如何捕获它,以便将其附加到CSV文件中?


你需要手动将字典转换为列表,并选择要保存的值 - 然后使用 csv.writer 将其附加到文件中。 - furas
1个回答

2
你可以使用Python的csv.DictWriter()来帮助处理这个问题。它接受一个字典并将其写入一行。你似乎只想要特定的字段,这可以通过忽略不在fieldnames参数中出现的字段来实现。例如:
import csv

data = {'data': [{'command': 'SUBS',
           'content': [{'1': 309.29,
                        '2': 309.29,
                        '3': 309.27,
                        '4': 309.27,
                        '5': 2.0,
                        '6': 611,
                        '7': 1654636260000,
                        '8': 19150,
                        'key': 'QQQ',
                        'seq': 538}],
           'service': 'CHART_EQUITY',
           'timestamp': 1654636324096}]}
           
req_fields = ["7", "1", "2", "3", "4", "5"]

with open("output.csv", "a", newline="") as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=req_fields, extrasaction="ignore")
    csv_output.writeheader()        # only needed once
    csv_output.writerow(data['data'][0]['content'][0])

这将会给你一个包含output.csv的文件:
7,1,2,3,4,5
1654636260000,309.29,309.29,309.27,309.27,2.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接