Файл внезапно записывает 1 строку данных вместо всего запроса - PullRequest
0 голосов
/ 08 мая 2019

Я использую IBAPI для сбора исторических котировок акций, и в настоящее время я использую этот код для достижения этого:

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


def print_to_file(*args):
    with open('text2.txt', 'w') as fh:
        fh.write(' '.join(map(str,args)))
        fh.write('\n')
        fh.close()
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} '\n'"
    print(Layout.format("Ticker;", "Date;", "None;", "Time;", "Open;", "High;", "Low;", "Close;", "Volume", '\n'))


    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 строкутекста вместо всех строк, которые поставляются с запросом.

Может ли кто-нибудь здесь попытаться помочь мне и выяснить, в чем проблема?

Код, который должен записать вТекстовый файл:

def print_to_file(*args):
    with open('text2.txt', 'w') as fh:
        fh.write(' '.join(map(str,args)))
        fh.write('\n')
        fh.close()
print = print_to_file

Если я разрешу писать код в терминал вместо файла, я получу весь запрос вместо одной строки.

Спасибо!

1 Ответ

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

Файл открывается в режиме 'w', поэтому функция обрезает файл при каждом открытии.Вместо этого следует использовать режим 'a'.

https://docs.python.org/3/library/functions.html#open

'w', открытый для записи, сначала обрезать файл

'a', открытый для записидобавление в конец файла, если он существует

...