Python выводит в виде столбцов, также добавляя запятые (csv) - PullRequest
0 голосов
/ 07 мая 2019

В настоящее время я использую IB API для запроса исторических данных.

У меня возникли проблемы с добавлением заголовков к данным. Вывод, который я сейчас получаю:

Ticker; Date; None; Time; Open; High;  Low;    Close;   Volume  AAPL ; 20190507; ; 10:19:00 ; 207.87 ; 207.87 ; 207.87 ; 207.87 ; 1

Но я бы хотел, чтобы результат был

Symbol; Date; None; Time; Open; High; low; Close; Volume

AAPL ; 20190507; ; 16:20:00 ; 205.25 ; 205.38 ; 205.11 ; 205.35 ; 451

Код, который я сейчас использую:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract


def print_to_file(*args):
    with open('text.txt', 'a') as fh:
        fh.write(' '.join(map(str,args)))
print = print_to_file

class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

    Layout = "{!s:1} {!s:2} {!s:3} {!s:4} {!s:5} {!s:6} {!s:7} {!s:8} {!s:8}"
    print(Layout.format("Ticker;", "Date;", "None;", "Time;", "Open;", "High;", "Low;", "Close;", "Volume "))


    def historicalData(self, reqId, bar):
        print("AAPL", ";", bar.date.replace(' ', '; '), ";", bar.open, ";", bar.high, ";", bar.low, ";", bar.close, ";", bar.volume)

def main():
    app = TestApp()

    app.connect("127.0.0.1", 7497, 0)

    contract = Contract ()
    contract.symbol = "AAPL"
    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    app.reqHistoricalData(0, contract, "", "1 D", "1 min", "TRADES", 0, 1, False, [])

    app.run()

if __name__ == "__main__":
    main()

Может ли кто-нибудь помочь мне с этой проблемой?

1 Ответ

0 голосов
/ 07 мая 2019

Следующий код может помочь вам записать значения в CSV-файл строка за строкой.

def header():
    h1 = ['col1']  
    h2 = ['col2']
    h3 = ['col3']
    h4 = ['col4']
    rows = zip(h1, h2, h3, h4)

    with open('text.txt', 'a') as f:
        wr = csv.writer(f)
        for row in rows:
            wr.writerow(row)
        f.close()

на основе рассматриваемых изменений, предлагая это:

def print_to_file(*args):
    with open('text.txt', 'a') as fh:
        fh.write(' '.join(map(str,args)))
        fh.write('\n')
        fh.close()

...