json 修改问题

2017-04-13 04:18:37 +08:00
 duohedianshuihao

有一个比较大的 json 文件。每一行都是一个单独的 json 文件。

现在想单独对某些行的 json 文件进行修改。目前的想法是遍历每一行,判断是否是需要修改的,然后将这行保存到另一个文件中。

现在想知道有没有办法可以在原文件里面直接修改想修改的部分?


with open('test.json', r+) as f:
	for line in f:
    	line = json.loads(line)
    	if line is target:
		line['sth'] = 'new'

有没有办法可以把修改后的 line 保存或者说替换原来的那行? 谢谢!

2782 次点击
所在节点    Python
8 条回复
geelaw
2017-04-13 07:22:53 +08:00
如果每一行修改前后所占用的 **字节数** 不变化则可以,你可以手动 seek 到需要修改的位置,写入新的内容,然后 seek 到下一个位置,依次类推,否则重建一个文件比较简单。
Gandum
2017-04-13 07:35:58 +08:00
可以
n = 0 #n 为操作标记位置
f.readline() #读取第一行
n1 = n #保存上一个 n
n = f.tell() #更新 n
if 需要修改:
f.seek(n1) 返回上一个标记位置
f.writelines("内容")

大概就是这样
duohedianshuihao
2017-04-13 07:36:22 +08:00
@geelaw 这样啊,谢谢!
Gandum
2017-04-13 07:39:32 +08:00
楼主搞定了,最好反馈一下,这样搞会不会快,快了多少
duohedianshuihao
2017-04-13 08:03:50 +08:00
@Gandum 谢谢!

这个方法是不是也要考虑一楼说的那个字节数要相同?我刚试了一下发现如果不一样的话会把后面的覆盖掉。
nightv2
2017-04-13 08:41:39 +08:00
@duohedianshuihao 一楼二楼的做法都是在指定的字节数限制之内写新的内容,只是一楼是说每行字节数一致,二楼是说用代码来获取这一行的字节数。
另外楼主如果你新的内容长度和原来不一致的话就不能用这种方法了。
duohedianshuihao
2017-04-13 09:14:59 +08:00
@nightv2 哦哦,这样,明白了!谢谢!
Natsumoku
2017-04-13 09:21:56 +08:00
可能跑题了,但是如果不用 python ,可以直接用命令行里的 sed ,加个-i 就是在原文件修改了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX