на самом деле здесь можно обойтись даже без программирования на Python, просто используя 2 утилиты unix:
Таким образом, если ваш xml находится в file.xml
, jtm преобразует его в следующий json:
bash $ jtm file.xml
[
{
"quiz": [
{
"que": "The question her"
},
{
"ca": "text"
},
{
"ia": "text"
},
{
"ia": "text"
},
{
"ia": "text"
}
]
}
]
bash $
а затем, применив ряд преобразований JSON, можно прийти к желаемому результату:
bash $ jtm file.xml | jtc -w'l:[1:][-2]' -ei echo { '"answer[-]"': {} }\; -i'l:[1:]' | jtc -w'l:[-1][:][0]' -w'l:[-1][:]' -s | jtc -w'l:' -w'l:[0]' -s | jtc -w'l: <>v' -u'"text"'
[
{
"answer1": "text",
"answer2": "text",
"answer3": "text",
"answer4": "text",
"text": "The question her"
}
]
bash $
Тем не менее, из-за того, что команда )использует сценарии оболочки (echo
, она будет медленнее, чем Python -для 5000 вопросов, я ожидаю, что она будет выполняться около минуты. (В будущей версии jtc
я планирую разрешить интерполяции даже в статически заданных JSON, чтобы для шаблонизации не требовалось скриптов внешней оболочки -, тогда операции будут выполняться молниеносно)
если вас интересует синтаксис jtc
, вы можете найти руководство пользователя здесь:https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md
Использование grep
иsed
:
grep -v -F -f <(sed 's/^[*[:space:]]*//' test_case_summary.csv) test_case_list.csv > diff.csv
Команда sed
удаляет все начальные *
и пробельные символы из test_case_summary.csv
, и этот вывод используется как ввод для опции grep
's -f
, определяющей файл шаблона.
Опция -F
используется для интерпретации шаблонов как фиксированных строк вместо регулярных выражений, а -v
выбирает не совпадающие -строки, т. е. строки в test_case_list.csv
, которые не заданы в файл шаблона. Затем вывод перенаправляется в файл diff.csv
.
Кроме того, вы можете добавить параметр grep
's -x
для соответствия только целым строкам.