解析交互式代理基本数据

2024-10-04 03:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地使用api从IB中提取数据。它是XML格式的,看起来像这样。。。在

 <TotalRevenues currency="USD">
      <TotalRevenue asofDate="2017-12-31" reportType="TTM" period="12M">239176000000.000000</TotalRevenue>
      <TotalRevenue asofDate="2017-09-30" reportType="TTM" period="12M">229234000000.000000</TotalRevenue>
      <TotalRevenue asofDate="2017-06-30" reportType="TTM" period="12M">223507000000.000000</TotalRevenue>
</TotalRevenues>
   <DividendPerShares currency="USD">
      <DividendPerShare asofDate="2017-12-31" reportType="A" period="3M">0.630000</DividendPerShare>
      <DividendPerShare asofDate="2017-09-30" reportType="A" period="3M">0.630000</DividendPerShare>
      <DividendPerShare asofDate="2017-09-30" reportType="A" period="12M">2.400000</DividendPerShare>
   </DividendPerShares>
   <Dividends currency="USD">
      <Dividend type="CD" exDate="2018-02-09" recordDate="2018-02-12" payDate="2018-02-15" declarationDate="2018-02-01">0.630000</Dividend>
      <Dividend type="CD" exDate="2017-11-10" recordDate="2017-11-13" payDate="2017-11-16" declarationDate="2017-11-03">0.630000</Dividend>
      <Dividend type="CD" exDate="2017-08-10" recordDate="2017-08-14" payDate="2017-08-17" declarationDate="2017-07-02">0.630000</Dividend>
   </Dividends>
   <EPSs currency="USD">
      <EPS asofDate="2017-12-31" reportType="A" period="3M">3.920000</EPS>
      <EPS asofDate="2017-09-30" reportType="A" period="3M">2.090000</EPS>
      <EPS asofDate="2017-09-30" reportType="A" period="12M">9.270000</EPS>
   </EPSs>
</FinancialSummary>

我想将此信息转换为以下格式的CSV格式:

^{pr2}$

有没有一个简单的方法可以做到这一点?在


Tags: 格式typecdepscurrencyperioddividendusd
1条回答
网友
1楼 · 发布于 2024-10-04 03:18:35

你可以试试这个:

import csv
import xmltodict

XML = """
<FinancialSummary>
    <TotalRevenues currency="USD">
        <TotalRevenue asofDate="2017-12-31" reportType="TTM" period="12M">239176000000.000000</TotalRevenue>
        <TotalRevenue asofDate="2017-09-30" reportType="TTM" period="12M">229234000000.000000</TotalRevenue>
        <TotalRevenue asofDate="2017-06-30" reportType="TTM" period="12M">223507000000.000000</TotalRevenue>
    </TotalRevenues>
    <DividendPerShares currency="USD">
        <DividendPerShare asofDate="2017-12-31" reportType="A" period="3M">0.630000</DividendPerShare>
        <DividendPerShare asofDate="2017-09-30" reportType="A" period="3M">0.630000</DividendPerShare>
        <DividendPerShare asofDate="2017-09-30" reportType="A" period="12M">2.400000</DividendPerShare>
    </DividendPerShares>
    <Dividends currency="USD">
        <Dividend type="CD" exDate="2018-02-09" recordDate="2018-02-12" payDate="2018-02-15" declarationDate="2018-02-01">0.630000</Dividend>
        <Dividend type="CD" exDate="2017-11-10" recordDate="2017-11-13" payDate="2017-11-16" declarationDate="2017-11-03">0.630000</Dividend>
        <Dividend type="CD" exDate="2017-08-10" recordDate="2017-08-14" payDate="2017-08-17" declarationDate="2017-07-02">0.630000</Dividend>
    </Dividends>
    <EPSs currency="USD">
        <EPS asofDate="2017-12-31" reportType="A" period="3M">3.920000</EPS>
        <EPS asofDate="2017-09-30" reportType="A" period="3M">2.090000</EPS>
        <EPS asofDate="2017-09-30" reportType="A" period="12M">9.270000</EPS>
    </EPSs>
</FinancialSummary>
"""


def write_to_csv(rows):
    header = 'date, total revenue, report type, period rev, dividendpershare, period div'.split(', ')
    with open('sample.csv', 'w', newline='') as fo:
        writer = csv.writer(fo)
        writer.writerow(header)
        writer.writerows(rows)


def main():
    d = xmltodict.parse(XML)
    root = d['FinancialSummary']
    total_revenue_list = root['TotalRevenues']['TotalRevenue']
    dividend_per_share_list = root['DividendPerShares']['DividendPerShare']
    rows = []
    for total_rev, dps in zip(total_revenue_list, dividend_per_share_list):
        row = [
            total_rev['@asofDate'],
            total_rev['#text'],
            total_rev['@reportType'],
            total_rev['@period'],
            dps['#text'],
            dps['@period']
        ]
        rows.append(row)

    write_to_csv(rows)


if __name__ == '__main__':
    main()

会产生一个示例.csv像这样:

^{pr2}$

这个示例程序是用Python3编写的,并使用了名为xmltodict的第三方库,您可以通过pip install xmltodict来安装它。在

相关问题 更多 >