使用make和Makefile从包含空格的文件路径中处理原始源数据

问题描述 投票:0回答:1

我有一个使用python脚本和Makefile的存储库。我想要一个设置程序使他们可以轻松地建立环境并从我们的服务器复制必要的数据文件。

将源数据文件包含在Makefile中的问题是公司服务器使用驱动器名称中的空格,这个空格不太喜欢,因此我可以将这些文件作为依赖项列出目标输出文件。

我当前的Makefile基本上仅执行以下操作:

.PHONY : all
all : output.csv

.PHONY : copy_data_to_local_folder
copy_data_to_local_folder :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 1.csv" local/inputs1.csv
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 2.csv" local/inputs2.csv

output.csv : combine_data.R local/inputs1.csv local/inputs2.csv
    Rscript $^ $@

copy_data_to_local_folder部分仅用于将数据获取到本地目录,但不包括在内在DAG中导致产生output.csv(即all : output.csv copy_data_to_local_folder),否则目标将需要每次运行。

我的解决方案如下,但我不确定最佳做法:

  1. [使用其他制作工具。我可以在Python中使用Luigi或在R中使用Drake,但我希望保留该工具有些笼统。

  2. 运行安装脚本以复制文件。我认为将有一种方法可以运行文件复制脚本作为环境设置的一部分,但我不熟悉该操作。

我不确定执行此操作的最佳方法。我希望能够与同事共享代码并让他们能够在其系统上启动并运行,而无需进行过多配置。有没有最好的这种情况下练习吗?

python python-3.x makefile data-science gnu-make
1个回答
0
投票

一个解决方法是:

local/inputs1.csv :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 1.csv" local/inputs1.csv
local/inputs2.csv :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 2.csv" local/inputs2.csv

output.csv : combine_data.R | local/inputs1.csv local/inputs2.csv

请注意,local/inputs1.csvlocal/inputs2.csv成为仅顺序依赖,因此仅当它们不存在时才建立。

© www.soinside.com 2019 - 2024. All rights reserved.