semenenko88
@semenenko88
Системный администратор

Как можно распарсить текст на python?

Я получаю подобный текст (он находится в переменной):
`-> test_snap                   2023-12-15 15:49:28     no-description
  `-> test_snap2                2023-12-22 09:38:39     no-description
    `-> snapshot3               2023-12-22 09:38:54     no-description
      `-> xxx                   2023-12-22 09:39:03     no-description
        `-> current                                     You are here!


То есть это вывод команды (получаю список снапшотов). Как мне можно этот вывод преобразовать в список:
[[test_snap, 2023-12-15 15:49:28], [test_snap2, 2023-12-22 09:38:39], [snapshot3, 2023-12-22 09:38:54], [xxx, 2023-12-22 09:39:03]]. Мне нужно выделять имя снапшота и его дату.

Убираем всё лишнее, и убираем последнюю строчку (`-> current You are here!).

На bash всякими grep, sed, awk я примерно знаю, как это делается. Помогите подтянуть знания в Python)
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Схема проста и есть несколько вариантов:
1) Пойти к фрилансерам и купить решение. Это самый простой быстрый и дешевый способ.
2) Самостоятелбно:
- Изучить основы питона
- Разобраться что такое регулярные выражения
- Написать функцию, которая из строки достаёт 2 нужных значения.
- Применить функцию ко всем строкам.
- ...
- Профит!

А вообще тут регекспы и не нужны вовсе. Достаточно разбить весь текст по символу абзаца на строки, а потом каждую строку разбить сплитом по пробельным символам (без аргументов). Всё, осталось взять только нужные столбцы получившейся таблицы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Модуль re в помощь. Если grep умеешь пользоваться, то и тут справишься.
Ответ написан
@deliro
Когда-то писал учебно-развлекательный конвертер таких вложенных структур из текста в JSON на расте: https://gist.github.com/deliro/ccd8bdb2aab78a229fe...

Зависимости

[dependencies]
serde = { version = "1.0.192", features = ["derive"] }
serde_json = "1.0.108"



Пример вывода на твоих данных (cat x.txt | cargo run -q | jq .)

[
  {
    "values": {
      "test_snap": "test_snap2",
      "15:49:28": "09:38:39",
      "no-description": "no-description",
      "`->": "`->",
      "2023-12-15": "2023-12-22"
    },
    "children": [
      {
        "values": {
          "no-description": "no-description",
          "test_snap": "snapshot3",
          "`->": "`->",
          "2023-12-15": "2023-12-22",
          "15:49:28": "09:38:54"
        },
        "children": [
          {
            "values": {
              "`->": "`->",
              "15:49:28": "09:39:03",
              "2023-12-15": "2023-12-22",
              "no-description": "no-description",
              "test_snap": "xxx"
            },
            "children": [
              {
                "values": {
                  "test_snap": "current",
                  "`->": "`->",
                  "2023-12-15": "You",
                  "15:49:28": "are",
                  "no-description": "here!"
                },
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
]



Для корректной работы нужна шапка (которой у тебя нет).

Если добавить шапку

Контент с шапкой:
_   name                        date       time         description
`-> test_snap                   2023-12-15 15:49:28     no-description
  `-> test_snap2                2023-12-22 09:38:39     no-description
    `-> snapshot3               2023-12-22 09:38:54     no-description
      `-> xxx                   2023-12-22 09:39:03     no-description
        `-> current                                     You are here!


Вывод:
[
  {
    "values": {
      "name": "test_snap",
      "time": "15:49:28",
      "description": "no-description",
      "date": "2023-12-15",
      "_": "`->"
    },
    "children": [
      {
        "values": {
          "name": "test_snap2",
          "description": "no-description",
          "time": "09:38:39",
          "_": "`->",
          "date": "2023-12-22"
        },
        "children": [
          {
            "values": {
              "date": "2023-12-22",
              "_": "`->",
              "time": "09:38:54",
              "description": "no-description",
              "name": "snapshot3"
            },
            "children": [
              {
                "values": {
                  "_": "`->",
                  "date": "2023-12-22",
                  "time": "09:39:03",
                  "name": "xxx",
                  "description": "no-description"
                },
                "children": [
                  {
                    "values": {
                      "date": "You",
                      "time": "are",
                      "description": "here!",
                      "_": "`->",
                      "name": "current"
                    },
                    "children": []
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
]



Если хочешь — переписывай на питон. Или пользуйся как cli
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 июн. 2024, в 22:12
5000 руб./за проект
21 июн. 2024, в 21:41
20000 руб./за проект
21 июн. 2024, в 21:34
20000 руб./за проект