Удалить объект JSON из файла в Python - PullRequest
0 голосов
/ 10 января 2019

Я не уверен, является ли мой файл 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 голосов
/ 10 января 2019

Объединяя предложения как Джоншарпа, так и Аджона, вместо того, чтобы удалять их во время чтения, считывайте их в память и затем записывайте обратно.

Однако вам может быть проще сначала прочитать json s, а затем исключить строки с сопоставленными элементами, вместо того, чтобы напрямую манипулировать текстом:

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" в строке.

0 голосов
/ 11 января 2019

Чтение всего файла в память может привести к проблемам с большими файлами. Возможно, вы захотите записать во временный файл, а затем перезаписать старый файл новым файлом. Для этого есть библиотека в Python: https://docs.python.org/3/library/tempfile.html

Если вы уверены, что ваш файл не большой, вам не нужна read_line, вы можете напрямую использовать json.load().

0 голосов
/ 10 января 2019

Как подсказывает @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 after:

test file
testfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...