Прощание имен файлов и извлечение времени эликсира - PullRequest
0 голосов
/ 22 октября 2019

У меня есть почти 100 тыс. Файлов в этом шаблоне.

["192.168.1.225_01_20190316070000734_TIMING.jpg",
 "192.168.1.225_01_20190316071000736_TIMING.jpg",
 "192.168.1.225_01_20190316072000736_TIMING.jpg",
 "Camera_1_615696208_20190318075200317_TIMING.jpg",
 "Camera_1_615696208_20190318080200322_TIMING.jpg",
 "Camera_1_615696208_20190318082200326_TIMING.jpg",
 "camera2_615696156_20190318080000375_TIMING.jpg",
 "camera2_615696156_20190318081000377_TIMING.jpg",
 "camera2_615696156_20190318093000394_TIMING.jpg"]

Они в основном на моем локальном диске, через который я делаю File.ls(@picture_directory)

все это картинки для 3 камер, которыеиметь идентификатор как

 cameras = %{
  "Camera_1_615696208_" => "nch1-zcpes",
  "camera2_615696156_" => "nch2-zkhcy",
  "192.168.1.225_01_" => "nch3-ipljs"
}

слева - префикс перед датой и временем ... а справа - идентификаторы.

Я пытаюсь сделать 3-tuple,как это ..

[filename, datetime, indentifier]

, который должен быть в одном файле.

["192.168.1.225_01_20190316070000734_TIMING.jpg", "20190316070000734", "nch3-ipljs']

Я пробовал это до сих пор.

defmodule EvercamMedia.Nch do
  @picture_directory "/home/junaid/Desktop/NCH"

  def move do
    cameras = %{
      "Camera_1_615696208_" => "nch1-zcpes",
      "camera2_615696156_" => "nch2-zkhcy",
      "192.168.1.225_01_" => "nch3-ipljs"
    }

    File.ls!(@picture_directory)
    |> Enum.sort
    |> Enum.map(fn file ->
      Enum.each(cameras, fn cam ->
        {prefix, exid} = cam
        with true <- String.contains?(file, prefix) do
          datetime = file |> String.trim_leading(prefix) |> String.trim_trailing("_TIMING.jpg")
          [file, datetime, exid]
        else
          _ -> :noop
        end
      end)
    end)
  end
end

но это тольковернуть список: ок ..

1 Ответ

2 голосов
/ 22 октября 2019

Это анализирует дату каждого имени файла и помещает ее в список, как в вашем примере.

[
  "192.168.1.225_01_20190316070000734_TIMING.jpg",
  "192.168.1.225_01_20190316071000736_TIMING.jpg",
  "192.168.1.225_01_20190316072000736_TIMING.jpg",
  "Camera_1_615696208_20190318075200317_TIMING.jpg",
  "Camera_1_615696208_20190318080200322_TIMING.jpg",
  "Camera_1_615696208_20190318082200326_TIMING.jpg",
  "camera2_615696156_20190318080000375_TIMING.jpg",
  "camera2_615696156_20190318081000377_TIMING.jpg",
  "camera2_615696156_20190318093000394_TIMING.jpg"
]
|> Enum.map(fn
  "192.168.1.225_01_" <> <<date::binary-size(17)>> <> _ = file -> [file, date, "nch3-ipljs"]
  "Camera_1_615696208_" <> <<date::binary-size(17)>> <> _ = file -> [file, date, "nch1-zcpes"]
  "camera2_615696156_" <> <<date::binary-size(17)>> <> _ = file -> [file, date, "nch2-zkhcy"]
end)

Вывод:

[
  ["192.168.1.225_01_20190316070000734_TIMING.jpg", "20190316070000734",
   "nch3-ipljs"],
  ["192.168.1.225_01_20190316071000736_TIMING.jpg", "20190316071000736",
   "nch3-ipljs"],
  ["192.168.1.225_01_20190316072000736_TIMING.jpg", "20190316072000736",
   "nch3-ipljs"],
  ["Camera_1_615696208_20190318075200317_TIMING.jpg", "20190318075200317",
   "nch1-zcpes"],
  ["Camera_1_615696208_20190318080200322_TIMING.jpg", "20190318080200322",
   "nch1-zcpes"],
  ["Camera_1_615696208_20190318082200326_TIMING.jpg", "20190318082200326",
   "nch1-zcpes"],
  ["camera2_615696156_20190318080000375_TIMING.jpg", "20190318080000375",
   "nch2-zkhcy"],
  ["camera2_615696156_20190318081000377_TIMING.jpg", "20190318081000377",
   "nch2-zkhcy"],
  ["camera2_615696156_20190318093000394_TIMING.jpg", "20190318093000394",
   "nch2-zkhcy"]
]
...