Вывод списка файлов данной папки в формате JSON - PullRequest
0 голосов
/ 18 апреля 2019

Использование Vim.Допустим, у меня есть папка с большим количеством файлов, и мне нужно каким-то образом перечислить их ...

choere_01.mp3 choere_02.mp3 choere_03.mp3 choere_04.mp3 choere_05.mp3 choere_06.mp3 choere_07.mp3 choere_08.mp3 choere_09.mp3 choere_10.mp3 choere_11.mp3 choere_12.mp3 ...

Какой самый удобный способ создания файла JSON, например:

 {
   "audio":[
     {"file":"choere_01.mp3"},
     {"file":"choere_02.mp3"},
     {"file":"choere_03.mp3"},
     {"file":"choere_04.mp3"},
     {"file":"choere_05.mp3"},
     {"file":"choere_06.mp3"},
     {"file":"choere_07.mp3"},
     {"file":"choere_08.mp3"},
     {"file":"choere_09.mp3"},
     {"file":"choere_10.mp3"},
     {"file":"choere_11.mp3"},
     {"file":"choere_12.mp3"},
     ...
    ]
  }

, который я использовалВим уже 8 месяцев и считаю себя новичком.Эта задача быстро выполняется в других редакторах.Что такое волшебный путь?Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Ну, не знаю, почему вы хотите сделать это в Vim, вероятно, есть лучшие инструменты для этого.

Однако, есть способ сделать это в Vim. Возможно, это также можно сделать более интерактивно, используя макросы и :s magic;)

Сначала определите функцию Vim:

func DirContents2Json()
  let list=glob('*.mp3', 0, 1)
  let b=map(sort(copy(list)), { i, v -> {'file': v}})
  return json_encode({'audio': b})
endfunc

Эта функция сначала возвращает список всех mp3-файлов в текущем каталоге, а затем преобразует возвращенный список в список словарей, используя лямбда-выражения.И, наконец, он возвращает словарь с ключом 'audio', который содержит список, и преобразует его в json, используя функцию json_encode().

Чтобы запустить его, откройте Vim в каталоге с вашими файлами, а затем вызовите :call append('$', DirContents2Json()).Для правильного форматирования вы можете использовать, например, !!python -m json.tool или что-то подобное.

Для этого требуется как минимум Vim 8.1

0 голосов
/ 18 апреля 2019

Я не уверен, является ли перечисление файлов обязательным требованием или создание целого jsonЕсли это последнее, ответ Кристиана идеален и должен хорошо сработать для вас!

Если в нем обычно перечислены файлы в текущем буфере, то есть более интуитивный способ сделать это.И поскольку вы относительно новичок, добавьте это на тот случай, если вы не знали этого раньше (поскольку это действительно поразило меня, когда я узнал об этом впервые:))

Vim может запускать внешнююКоманды оболочки и введите вывод команды в текущий буфер, используя :r!.Это очень мощно, так как вы можете передать несколько команд, чтобы получить желаемый результат.Например, вы можете прочитать большой файл, используя фильтр cat, его вывод, используя grep обратный sort его и т. Д. , а затем ввести его в текущий буфер.

В любом случае, для вашего примера, чтобы ввести "file": "somefile.mp3"" для каждого файла в каталоге, вы можете использовать следующую команду:

:r! ls /some/directory/where/files/are | grep '.mp3' | awk '{$line = "\"file\": \"" $1 "\""; print $line }'

Если разбить его, команда выполняет 3 шага

  • перечисление файлов с использованием ls
  • фильтрация только .mp3 файлов с использованием grep
  • Печать в требуемом формате uisng awk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...