有一个比较大的 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 保存或者说替换原来的那行? 谢谢!
1
geelaw 2017-04-13 07:22:53 +08:00 1
如果每一行修改前后所占用的 **字节数** 不变化则可以,你可以手动 seek 到需要修改的位置,写入新的内容,然后 seek 到下一个位置,依次类推,否则重建一个文件比较简单。
|
2
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("内容") 大概就是这样 |
3
duohedianshuihao OP @geelaw 这样啊,谢谢!
|
4
Gandum 2017-04-13 07:39:32 +08:00
楼主搞定了,最好反馈一下,这样搞会不会快,快了多少
|
5
duohedianshuihao OP |
6
nightv2 2017-04-13 08:41:39 +08:00
@duohedianshuihao 一楼二楼的做法都是在指定的字节数限制之内写新的内容,只是一楼是说每行字节数一致,二楼是说用代码来获取这一行的字节数。
另外楼主如果你新的内容长度和原来不一致的话就不能用这种方法了。 |
7
duohedianshuihao OP @nightv2 哦哦,这样,明白了!谢谢!
|
8
Natsumoku 2017-04-13 09:21:56 +08:00 via Android
可能跑题了,但是如果不用 python ,可以直接用命令行里的 sed ,加个-i 就是在原文件修改了
|