Python - 循环追加到 Json 文件

标签 python json bots

早上好

昨天我开始为加密货币市场编写一个简单的公告机器人。 此时我想读取代码(市场价格)并将数据实时保存到 .json 文件中。 Python 的 dump 函数可以解决这个问题。到目前为止,代码看起来像这样

start = time.time()
while 1:
    end = time.time()
    raz = end - start
    if raz >= 5:
        for i in range(len(self.keys)):
             self.dictTicker(self.values[i])
             start = end
    sleep(0.005)

self.dictTicker 是遍历选定市场并将数据保存在 .json 文件中的函数

def dictTicker(self, market):
    ticker = api.get_ticker(market)
    self.data['year'] = datetime.now().year
    self.data['month'] = datetime.now().month
    self.data['day'] = datetime.now().day
    self.data['hour'] = datetime.now().hour
    self.data['min'] = datetime.now().minute
    self.data['sec'] = datetime.now().second
    self.data['bid'] = ticker['result']['Bid']
    self.data['ask'] = ticker['result']['Ask']
    self.data['last'] = ticker['result']['Last']

    with open("{}.json".format(market), 'a') as f:
        json.dump([self.data], f)
        f.close()

.json 文件的示例如下所示。

{"year": 2017, "month": 8, "day": 6, "hour": 6, "min": 38, "sec": 4, "bid": 0.00224, "ask": 0.00225999, "last": 0.00225999}{"year": 2017, "month": 8, "day": 6, "hour": 6, "min": 38, "sec": 9, "bid": 0.00223611, "ask": 0.00224, "last": 0.00224}

问题是这种格式 {}{} 是错误的。它应该是 {{}{}}。或者换句话说,字典列表而不是多个字典。

当我尝试读取文件时,我使用以下代码:

 with open("BTC-SEC.json") as f:
     a = json.load(f)
     print(a)

我收到以下错误:

json.decoder.JSONDecodeError: Extra data: line 1 column 121 (char 120)

我在堆栈上进行了搜索,但找不到对我有帮助的答案。任何帮助将不胜感激。

最佳答案

我遇到了同样的问题,一段时间后我发现诀窍实际上是拥有一个字典列表,所以 [{},{}]。 所以它只是在循环之前创建一个空列表,然后在每次迭代时 .extend() 它。 最后,在循环外,经典的 json.dump(extended_list, file) 做得很好!
希望对你有帮助

关于Python - 循环追加到 Json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528599/

相关文章:

python - Flask SQLAlchemy - 需要帮助将 3 个类映射在一起

python - 如何在保存数据的同时在 for 循环中使用多处理池?

java try catch 并返回

azure - 未找到 AZ 扩展机器人服务

python - Messenger 机器人每 5 条消息发送一条消息

python - 在 Apache 服务器上设置 Django 项目

python - 在 Python 中,我无法使用 PIL 正确打开一些 png 图像

php - 如果数组发生变化,如何发送警报?

ruby-on-rails - Gem::installerror: 'json' native gem 需要安装构建工具。请更新我们的路径以包含构建工具

javascript - 如何在 Javascript 中定义串联?