Извлечение данных из последних N строк текстового файла в массивы на python

#python #arrays #file-handling

#python #массивы #обработка файлов

Вопрос:

Я пытаюсь извлечь данные разных типов, заключенные в несколько типов пробелов, из последних N строк текстового файла в массивы на python

Я пытался использовать функцию split () для разделения данных, но не смог получить правильные элементы разделения, поскольку между данными, которые я хочу фактически разделить и сохранить, есть несколько разных типов пробелов

Это образец текстового файла, который у меня есть :

 {"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]},
  

Я хотел бы иметь возможность извлекать данные из последних 6 строк, например, и получать следующие результаты :

(arr1 размером 6×1)

 arr1 = [ [2019-03-29] , [2019-04-01] , [2019-04-01], [2019-04-01] , [2019-04-01] , [2019-04-01] ] 
  

(arr2 размером 6×7)

 arr2 = [[0, 4, 3, 0, 0, 2, 0], [0, 4, 3, 0, 0, 2, 0], [0, 4, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0]]
  

Комментарии:

1. Является ли это json файлом?

2. @Rakesh Это вроде как один, но это всего лишь файл журнала, который записывает эти данные в текстовый файл.

Ответ №1:

Вы можете перебирать строки и сохранять последние шесть в массиве.

 with open('jsons.txt') as jsons:
    lines = []
    for line in jsons:
        lines.append(line)
        if len(lines) > 6:
            lines.pop(0)
arr1 = []
arr2 = []
for line in lines:
    j = json.loads(line)
    for k in j:
        arr1.append([k])
        arr2.append(j[k][0][1])
  

Ответ №2:

Вы можете прочитать каждую строку как объект Json, который будет сопоставлен со списком словаря со списком объектов.

Здесь есть несколько примеров.

Но в принципе, прочитайте каждую строку и вызовите json.loads(строка), и вы получите словарь для каждой строки.

Оттуда вы можете начать работать как обычно с Python и получить все, что вам нужно.

Ответ №3:

Прочитайте файл в обратном порядке, чтобы получить последние 6 строк.

 for line in reversed(list(open("filename"))):
    print(line.strip())
  

разделил строки с помощью функции spilt() на символ ‘:’:-

 line.spilt(':')
  

Добавьте дату и список списков([[]]) в разные списки. позже отформатируйте второй полученный список в список нужного формата, используя вложенный цикл for.