将列表扩展到 Python 中的 json 文件
Extend list to json file in 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 数组加载到列表中,可以只扩展它,但文件很大,我担心性能问题。
有没有简单的方法可以做到这一点?
提前致谢。
您可以将文件作为字符串读取,删除最后一个“]”,将 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 和扩展列表更高效,因为这只涉及字符串 read/write和操纵。
您可以尝试将文件指针移动到最后一个“]”的位置,然后在没有开头的“[”的情况下写入附加的json,像这样:
>>> import io
>>> with open('example.json', 'rb+') as f:
... f.seek(-1, io.SEEK_END)
... f.write(b', ' + new_json[1:].encode())
请注意,这必须使用二进制模式的文件来完成。上面的代码假定文件系统编码将“]”编码为单个字节,并且没有换行符和文件结尾。如果这些条件中的任何一个成立,您将需要调整传递给 seek
.
的偏移量
我在 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 数组加载到列表中,可以只扩展它,但文件很大,我担心性能问题。 有没有简单的方法可以做到这一点?
提前致谢。
您可以将文件作为字符串读取,删除最后一个“]”,将 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 和扩展列表更高效,因为这只涉及字符串 read/write和操纵。
您可以尝试将文件指针移动到最后一个“]”的位置,然后在没有开头的“[”的情况下写入附加的json,像这样:
>>> import io
>>> with open('example.json', 'rb+') as f:
... f.seek(-1, io.SEEK_END)
... f.write(b', ' + new_json[1:].encode())
请注意,这必须使用二进制模式的文件来完成。上面的代码假定文件系统编码将“]”编码为单个字节,并且没有换行符和文件结尾。如果这些条件中的任何一个成立,您将需要调整传递给 seek
.