【问题标题】:Extend list to json file in Python在 Python 中将列表扩展为 json 文件
【发布时间】:2020-10-18 21:29:09
【问题描述】:

我有一个保存在 json 文件中的数组,看起来像 [4.810,-75.700,0.020,11,5.070,-75.520,0.010,11]。我正在使用 Python 将新的 4 元组附加到这个数组。

globe_list = [18.110,-66.170,0.000,11]
json_array = json.dumps(globe_list)
    with open(webgl_file_path + 'tweet_locations.json', 'a') as tf:
        tf.write(json_array)

问题是,当文件已经存在时,追加后得到的是两个数组:

[4.810,-75.700,0.020,11,5.070,-75.520,0.010,11][18.110,-66.170,0.000,11]

而我想要的是一个数组:

[4.810,-75.700,0.020,11,5.070,-75.520,0.010,11, 18.110,-66.170,0.000,11]

如果我首先将 json 数组加载到列表中,则可以扩展它,但文件很大,我担心性能问题。 有没有简单的方法来做到这一点?

提前致谢。

【问题讨论】:

    标签: python json python-3.x file extend


    【解决方案1】:

    您可以尝试将文件指针移动到最后的“]”的位置,然后编写附加的 json,不带初始的“[”,如下所示:

    >>> import io
    >>> with open('example.json', 'rb+') as f:
    ...     f.seek(-1, io.SEEK_END)
    ...     f.write(b', ' + new_json[1:].encode())
    

    请注意,这必须对二进制模式的文件进行。上面的代码假定文件系统编码将“]”编码为单个字节,并且没有换行符和文件结尾。如果其中任何一个条件成立,您需要调整传递给 seek 的偏移量。

    【讨论】:

    • 这对我来说是一个有趣的问题,因为考虑到所有事情,这个请求似乎都很微不足道,但我想不出一个不直观的答案。这是迄今为止最好的,IMO。
    【解决方案2】:

    您可以将文件作为字符串读取,删除最后一个 ']',将 globe_list 转换为字符串,删除其第一个 '[' 并写回附加的字符串。

    f = open(webgl_file_path + 'tweet_locations.json')
    cont = f.read()
    del f[len(f) - 1]
    jsonstr = str(globe_list)[1:]
    final_cont = cont + jsonstr
    close(f)
    w = open(webgl_file_path + 'tweet_locations.json', 'w')
    w.write(final_cont)
    

    我想这不会很快,但肯定会比使用 json.load / json.dump 和扩展列表更高效,因为这只涉及字符串读/写和操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 2017-11-30
      • 2019-09-29
      • 2014-05-24
      • 2012-02-05
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多