Python 使用make和makefile从包含空格的文件路径中的原始源数据工作
我有一个使用python脚本和Makefile的存储库。我想有一个安装程序 允许他们轻松设置环境并从我们的服务器复制必要的数据文件 在Makefile中包含源数据文件的问题在于公司服务器使用 驱动器名中的空格,make不太喜欢,所以我可以将这些文件列为依赖项 对于目标输出文件 我当前的Makefile基本上只执行以下操作:Python 使用make和makefile从包含空格的文件路径中的原始源数据工作,python,python-3.x,makefile,data-science,gnu-make,Python,Python 3.x,Makefile,Data Science,Gnu Make,我有一个使用python脚本和Makefile的存储库。我想有一个安装程序 允许他们轻松设置环境并从我们的服务器复制必要的数据文件 在Makefile中包含源数据文件的问题在于公司服务器使用 驱动器名中的空格,make不太喜欢,所以我可以将这些文件列为依赖项 对于目标输出文件 我当前的Makefile基本上只执行以下操作: .PHONY : all all : output.csv .PHONY : copy_data_to_local_folder copy_data_to_local_fo
.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复制\u数据\u到\u本地\u文件夹
)或
目标每次都需要运行
我的解决方案想法如下,但我不确定什么是最佳实践:
Luigi
,或者在R中使用Drake
,但我更愿意保留
该工具更具通用性local/inputs1.csv :
python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 1.csv" $@
local/inputs2.csv :
python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 2.csv" $@
output.csv : combine_data.R | local/inputs1.csv local/inputs2.csv
Rscript $^ $| $@
请注意,
local/inputs1.csv
和local/inputs2.csv
是仅按订单制作的先决条件,因此它们仅在不存在时制作(除非您希望在每次运行makefile时复制它们)。自动变量$|
只引用订单先决条件,它们不包括在$^
中,我不知道这个功能存在,这非常有用。谢谢@teepee这2条重复规则可能可以替换为1条模式规则(一行):local/inputs%.csv:;python copyfile.py“V:\\Server Path\\With Spaces\\Inputs$*.csv”$@
谢谢,Maxim。我想这样做的问题是本地文件名将保留其任何空格,因为我无法使用该规则指定其他名称,对吗?@teepee该模式规则使用与原始规则相同的本地名称创建文件-local/inputsN.csv
。