在Elixir中有没有相当于enhpath的东西?

时间:2014-03-11 15:23:29

标签: elixir

在Python中,第三方enhpath.py库允许这样的内容:

In [2]: path("/home/lowks/Documents").listdir()
Out[2]: 
[path('/home/lowks/Documents/5fc72638da7598b350733c5a51fce596.jpeg'),
 path('/home/lowks/Documents/Prop-API-01.pdf'),]

Elixir中的File模块执行如下操作:

iex(1)> File.ls!("/home/lowks/Documents")
["5fc72638da7598b350733c5a51fce596.jpeg","Prop-API-01.pdf"]

这对我来说效果不好,因为我想要像上面那样的绝对路径,所以我做了类似的事情:

iex(2)> File.ls!("/home/lowks/Documents") |> Enum.map(&Path.absname(&1))
["/home/lowks/5fc72638da7598b350733c5a51fce596.jpeg",
 "/home/lowks/dsr_excel_csv.sql"]

但是从输出可以看出,绝对路径连接到cwd工作目录而不是正确的路径" / home / lowks / Documents"。这看起来和行为类似于用于处理Python中的路径的股票python库,我的问题是他们有什么行为像第三方Python路径库?

3 个答案:

答案 0 :(得分:2)

在我看来,如果您使用Path.expand/2代替Path.absname/1,那么您的第二个版本就会有效:

iex(1)> path = ...
iex(2)> File.ls!(path) |> Enum.map(&Path.expand(&1, path))

答案 1 :(得分:1)

我已经搜索过并且没有找到任何libs,所以我自己创建了一个:

https://github.com/lowks/Radpath

答案 2 :(得分:0)

你也可以这样做:

def dir_files(dir_path) do
  File.ls!(dir_path) |> Enum.map(&Path.join(dir_path, &1))
end