在Python中将列表扩展到json文件

2024-04-29 12:17:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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数组,a可以扩展它,但是这个文件很大,我担心性能问题。 有没有一个简单的方法可以做到这一点

提前谢谢


Tags: 文件pathjsontfwith数组openarray
2条回答

您可以将文件读取为字符串,删除最后一个']',将globe_列表转换为字符串,删除其第一个'[',然后写回附加的字符串

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和扩展列表性能更好,因为这只涉及字符串读/写和操作

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

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

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

相关问题 更多 >