直接将JSON数据转储到文本文件中?

时间:2019-10-30 13:08:59

标签: python json python-3.x

当前,我无法从其他客户端软件接收到的数据写入到一个文件中,该文件将在每次转储后追加并添加一个空格。我尝试了很多不同的方法,但是现在我已经离开了,我有些困惑。

此刻,我无法再写文件了,而且不确定执行销毁那部分代码的方式。

while True:
    data = s.recv(1024).decode('utf-8')
    if data:
        with open("data.txt", 'w') as f:
            json.dump(data, f, ensure_ascii=False)

我希望每次出现新数据时,都会出现一个不会被覆盖的文件,从而使我能够开发应用程序的搜索和表功能。

1 个答案:

答案 0 :(得分:0)

您当前对每个块执行的操作:

  1. 将块解码为UTF
  2. 打开文件,截断先前的内容('w'模式)
  3. 重新编码数据
  4. 将其转储到文件中

为什么这样做很糟糕:

  1. 您的块不一定要遵守UTF代码点边界。您需要先累积所有数据,然后才能解码。
  2. 不仅使用'w'而非'a'模式来删除现有文件,而且一遍又一遍地打开和关闭文件效率很低,而且通常是个坏主意。
  3. 如果原始块超出了UTF边界,您将不会获得相同的结果。最坏的情况是,您的整个数据集将成为垃圾。
  4. 您无法结束流。您可能最终想关闭文件并对其进行解码。

您应该如何做:

  1. 打开输出文件(以二进制模式)
  2. 循环直到流结束
  3. 将所有原始二进制数据包转储到文件中
  4. 关闭文件
  5. 在读取文件时对其进行解码

示例代码:

with open('data.txt', 'wb') as file:
    while True:
        data = s.recv(1024)
        if not data:
            break
        file.write(data)

如果二进制流包含UTF-8编码的JSON数据,那么您将在文件中得到该信息。