elixir - 分割文件名和提取时间长生不老药
问题描述
在这种模式下,我有近 100k 个文件。
["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
但这只会返回一个列表:ok..
解决方案
这会解析每个文件名中的日期,并将其放在一个列表中,就像您的示例一样。
[
"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"]
]
推荐阅读
- c# - SqlException:对象名无效,对象在运行时创建
- android - YoutubeExtractor Android 依赖错误
- php - 包含来自 Head 标签的脚本和资源的 PHP 文件(PHP 包含问题)
- reactjs - 在 ReactJS 中对表格进行分页
- next.js - __dirname 未在 API 路由中定义
- html - 我无法为我的身体设置颜色背景
- java - 在 Intellij Ultimate 中为简单的 Spring 应用程序设置 applicationContext.xml
- php - Woocommerce - 更改产品图库图片仅选择变体
- flutter - 异步等待没有按预期工作,它必须返回我未来的结果
- r - 循环遍历数据框的两列