【问题标题】:Binance API: Store kline/candlestick data to .csv fileBinance API:将 kline/candlestick 数据存储到 .csv 文件
【发布时间】:2021-09-16 12:12:15
【问题描述】:

我正在尝试将一些 .json 数据从 API 写入 CSV 文件

我的代码:

from binance.client import Client
import config
import pandas as pd
import pandas_datareader as web
from pandas_datareader import data as dreader


client = Client(config.apiKey,config.apiSec)
print("Logged in")

symbol = 'BTCUSDT'

klines = client.get_historical_klines(symbol, Client.KLINE_INTERVAL_1WEEK, "1 Jan, 2017")


print(klines)

df = pd.read_json(klines)
df.to_csv(r'path')

错误:

Traceback(最近一次调用最后一次): 文件“\OneDrive\Knowledge\Python\Binance API new\BTC-price-get.py”,第 19 行,在 df = pd.read_json(klines) 包装器中的文件“\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\util_decorators.py”,第 199 行 返回函数(*args,**kwargs) 包装器中的文件“\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\util_decorators.py”,第 296 行 返回函数(*args,**kwargs) 文件“\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\json_json.py”,第 593 行,在 read_json filepath_or_buffer, _, 压缩, should_close = get_filepath_or_buffer( 文件“\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py”,第 243 行,在 get_filepath_or_buffer 引发 ValueError(味精) ValueError:无效的文件路径或缓冲区对象类型: PS \Python>

【问题讨论】:

  • klines 显然是一个列表...你为什么要尝试使用pd.read_json???
  • 为什么要涉及熊猫??
  • 有什么替代方案?
  • 使用标准库csv模块。注意,我认为你使用的库已经反序列化了 json,所以你甚至不需要 json 模块。
  • 谢谢。我现在使用常规 csv 模块解决了它

标签: python export-to-csv binance


【解决方案1】:

get_historical_klines() 返回嵌套的 list ohlcv 值,而不是 json 字符串或字典 (source)。因此,您不需要pandas。请改用内置的csv 模块。

import csv
from binance.client import Client

API_KEY = 'XXX'
API_SECRET = 'XXX'
SYMBOL = 'BTCUSDT'

client = Client(API_KEY, API_SECRET)

columns = [
    'open_time', 'open', 'high', 'low', 'close', 'volume',
    'close_time', 'quote_asset_volume', 'number_of_trades',
    'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
    'ignore'
]

klines = client.get_historical_klines(SYMBOL, Client.KLINE_INTERVAL_1WEEK, "1 Jan, 2017")

with open('output.csv', 'w') as f:
    write = csv.writer(f)
    write.writerow(columns)
    write.writerows(klines)

output.csv(摘录):

open_time,open,high,low,close,volume,close_time,quote_asset_volume,number_of_trades,taker_buy_base_asset_volume,taker_buy_quote_asset_volume,ignore
1502668800000,4261.48000000,4485.39000000,3850.00000000,4086.29000000,2843.43142600,1503273599999,12021576.48265154,13134,2240.24924000,9482742.92094674,10125.41408414
1503273600000,4069.13000000,4453.91000000,3400.00000000,4310.01000000,4599.39662900,1503878399999,18978983.50987317,37826,1755.53026500,7173180.19744751,11456.95307303
1503878400000,4310.01000000,4939.19000000,4124.54000000,4509.08000000,4753.84337600,1504483199999,21581679.92866748,35717,1371.03442800,6237542.20612072,12653.02927308
1504483200000,4505.00000000,4788.59000000,3603.00000000,4130.37000000,6382.78774500,1505087999999,27307824.36893929,42372,2821.42273900,12120979.77068529,10431.32749057
1505088000000,4153.62000000,4394.59000000,2817.00000000,3699.99000000,8106.70512700,1505692799999,30026796.42861788,50423,3763.12845200,13956149.18844029,8391.64647834
1505692800000,3690.00000000,4123.20000000,3505.55000000,3660.02000000,5908.32335000,1506297599999,22501242.65454204,56785,2821.43888700,10711864.12380805,7915.33467487
1506297600000,3660.02000000,4406.52000000,3653.69000000,4378.48000000,5782.30542400,1506902399999,23750419.76839855,71484,2482.36136700,10200163.49185349,12307.06710083
1506902400000,4400.00000000,4658.00000000,4110.00000000,4640.00000000,4708.27295600,1507507199999,20366578.25125568,59658,2077.80349000,9008752.49455302,12341.69993665
1507507200000,4640.00000000,5922.30000000,4550.00000000,5709.99000000,7913.92583700,1508111999999,42038755.95644524,61638,4280.12726900,22483871.99105491,12726.86837082
1508112000000,5710.00000000,6171.00000000,5037.95000000,5950.02000000,12157.76944700,1508716799999,69446644.86619962,75969,5501.91240000,31411073.98003196,14069.26805535
1508716800000,5975.00000000,6189.88000000,5286.98000000,6169.98000000,13133.99457000,1509321599999,75229774.73890872,74778,5845.14325200,33499318.44481458,15033.66434266
1509321600000,6133.01000000,7590.25000000,6030.00000000,7345.01000000,11663.20964800,1509926399999,79517426.53915779,98387,5037.95081100,34445720.64501364,19065.20952449

Documentation Binance candlestick

Using csv module

【讨论】:

    【解决方案2】:

    通过以下命令将对象转换为json:

    jsonStr = json.dumps(myobject.dict)

    并将 json 保存在一个文件中。 然后,您将使用以下代码:

    import pandas as pd
    df = pd.read_json(r'Path where the JSON file is saved\File Name.json')
    df.to_csv(r'Path where the new CSV file will be stored\New File Name.csv', index=None)
    

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 2020-08-19
      • 2017-11-04
      • 2018-12-23
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      相关资源
      最近更新 更多