我一直在编写这个脚本,最近我一直试图通过将所有内容都放在自己的函数中来让它更干净。下面的代码运行时没有错误,获取我想要的数据并将其保存到mongdb,但它不会写入csv
函数save_db
和save_csv
非常相似,我不明白为什么save_db
工作而save_csv
不工作。另外,我想在这两个函数中都使用ldf
变量。我是否必须在这两个函数中都设置ldf = make_df(data)
,或者是否有办法将ldf
共享到save_csv
,因为它已经在save_db
中被调用了。功能使我沮丧
import requests
import json
import pandas as pd
from pymongo import MongoClient
import os, time
market_symbols = []
candleInterval = '1'
def get_candle(marketSymbol):
candle_url = f'https://api.kraken.com/0/public/OHLC?pair={marketSymbol}&interval={candleInterval}'
candle_data = requests.get(candle_url)
bytes_value = candle_data.content
my_json = bytes_value.decode('utf8').replace("'", '"')
data = (json.loads(my_json))
data['symbol'] = marketSymbol
return data
def make_df(data):
df = pd.DataFrame(data['result'])
unnested_df = pd.concat([
pd.DataFrame(df[x].tolist()).add_prefix(f'{x}_')
for x in df
], axis=1)
fdf = unnested_df
fdf.columns =['Timestamp', 'Open', 'High', 'Low', 'Close', 'Vwap', 'Volume', 'Count', 'Last']
fdf.drop('Last',axis=1,inplace=True)
fdf.insert(1, 'Time', pd.to_datetime(fdf.Timestamp, unit='s'))
fdf.insert(9, 'Pair', data['symbol'])
ldf=fdf.iloc[[-2]]
print(ldf)
return ldf
def save_db(data):
ldf = make_df(data)
db_name = 'KTDB'
db_collect = 'intermittent'
client = MongoClient('localhost', 27017)
kdb = client[db_name]
pdata = ldf.to_dict(orient='records')
kdb[db_collect].insert_many(pdata)
def save_csv(data):
ldf = make_df(data)
csv_file = f"ktester-{candleInterval}.csv"
if(csv_file in os.listdir()): #append, file exists
csv_string = ldf.to_csv(index=False, encoding='utf-8', header=False)
with open(csv_file, 'a') as f:
f.write(csv_string)
else: #write new file
csv_string = ldf.to_csv(index=False, encoding='utf-8')
with open(csv_file, 'w') as f:
f.write(csv_string)
if __name__ == "__main__":
candle_symbols = ['XBTUSD', 'ADAUSD']
for symbol in candle_symbols:
tick_data = get_candle(symbol)
save_db(tick_data)
save_csv(tick_data)
目前没有回答
相关问题 更多 >
编程相关推荐