从Python中的文件中删除JSON对象

时间:2019-01-10 19:44:21

标签: python json file

我不确定json文件是否唯一,但是找不到其他有效的问题/答案。

我的JSON文件如下:

{"UserID": "name1", "Timestamp": "1234"}
{"UserID": "name2", "Timestamp": "4321"}
{"UserID": "name3", "Timestamp": "1234"}

python是否有办法从文件中删除整行?

这是我到目前为止所做的:

open_file = open("times.json", 'r')
line = open_file.readline()

while line:
    jsonLine = json.loads(line)

    if line['Timestamp'] == '1234':
        del line

open_file.close()

如果时间戳为1234,则我希望它删除整个对象,因此文件将如下所示:

{"UserID": "name2", "Timestamp": "4321"}

谢谢!

3 个答案:

答案 0 :(得分:1)

如@jonrsharpe所建议,您可以阅读文件。进行所需的任何操作。然后重写文件。

这里是一个例子:

test.out:

test file
#test comment
testfile

Python代码:

content = ''
with open('test.out', 'r') as f:
  for line in f:
    if line.startswith('#'): continue # don't copy comment lines
    content += line

with open('test.out', 'w') as f:
  f.write(content)

test.out之后:

test file
testfile

答案 1 :(得分:1)

结合jonrsharpe和ajon的建议,而不是在阅读时将其删除,而是将其读入内存,然后再写回。

但是,您可能有更轻松的时间先阅读json,然后消除具有匹配元素的行,而不是直接处理文本:

json_lines = []
with open("times.json", 'r') as open_file:
    for line in open_file.readlines():
        j = json.loads(line)
        if not j['Timestamp'] == '1234':
            json_lines.append(line)

with open("times.json", 'w') as open_file:
    open_file.writelines('\n'.join(json_lines))

与在行中专门搜索"TimeStamp": "1234"相比,此方法在必要时为您提供了更多的条件灵活性,可以针对多个键/值。

答案 2 :(得分:0)

将整个文件读入内存可能会导致大文件出现问题。您可能要写入一个临时文件,然后用新文件覆盖旧文件。 python库中有一个针对该版本的构建:https://docs.python.org/3/library/tempfile.html

如果确定您的文件不大,则不需要read_line,可以直接使用json.load()