我正在使用Jsonlines或ndjson,并且想使用python在一行中编辑单个键/值并更新文件中的行。
当前,Python库jsonlines和json-lines似乎仅允许您读取现有条目或编写新条目,而不能编辑现有条目。
例如,在jsonlines library中,您可以打开文件并将对象包装在读取器或写入器中:
import jsonlines
with jsonlines.open('input.jsonl') as reader:
for obj in reader:
...
with jsonlines.open('output.jsonl', mode='w') as writer:
writer.write(...)
假设您有以下jsonlines文件:
{"name":"Alice","age":24}
{"name":"Bob","age":22}
在python中更新字典非常容易。在这种情况下,它将类似于:
entry = {"name":"Alice","age":24}
entry.update({"age":25})
该库似乎将这些行作为字典打开。您可以从jsonlines库中调用update方法:
import jsonlines
with open('names.jsonl', 'rb') as f:
for item in json_lines.reader(f):
item.update({'age':25})
print(item['age'])
这有两个问题:
names.jsonl
保持不变答案 0 :(得分:1)
尝试以下代码:
import jsonlines
with jsonlines.open('input.jsonl') as reader, jsonlines.open('output.jsonl', mode='w') as writer:
for obj in reader:
if obj['name'] == 'Alice':
obj['age'] = 25
writer.write(obj)
当input.jsonl
字段为output.jsonl
时,它将把age
的所有行复制到25
并将name
字段更改为Alice
< / p>