我在SAS中有一个创建.csv的进程。我在Python中有另一个进程,等待文件存在,然后对该文件执行某些操作。我想确保在SAS编写完文件之前,Python进程不会开始执行它的操作。
我以为我会让SAS创建.csv,然后在文件完成后重命名。我可以在SAS中重命名吗?然后python进程可以等到重命名的文件存在。
编辑:我不小心将此问题两次发布,然后意外删除了两个版本。对于那个很抱歉。答案 0 :(得分:2)
我认为比重命名更好的是编写执行SAS程序的shell脚本,然后只有在SAS程序退出而没有错误时才执行Python脚本。根据您的操作系统,这种语法会有所不同,但不会太困难。
答案 1 :(得分:1)
对于verion 9.2及更高版本,SAS有rename function,它应该按照你想要的方式工作。
答案 2 :(得分:0)
您可以在SAS数据集中生成输出,然后只有在完成后才能写入.csv文件。不确定你是如何创建csv的,但我通常只是这样做:
data _null_;
file './ouptut_file.csv' dlm=',';
set dataset_name;
put var1 var2;
run;
如果您在SAS代码的最后执行此操作,则在完成操作数据之前不会生成任何csv文件。
答案 3 :(得分:0)
这样做的方法不止一种。
python脚本是否仅监视.csv文件?或者在该目录中创建任何新文件时会触发它?
如果它只触发.csv,那么你可以简单地输出到一个.txt文件,然后使用x语句(OS命令)重命名,或者重命名为@cmjohns建议。
另一种选择是,您可以将.csv文件输出到其他目录,然后将其移动到python正在监视的目录。只要文件位于同一磁盘中,移动文件就会立即完成。
您还可以修改python脚本以仅查找.csv,然后执行选项1.
您甚至可以为python创建一个“标志”文件,以检查sas何时完成.csv。
但如果可能的话,我想我会选择@jgunnink。
答案 4 :(得分:0)
让观看节目观看单独的小文件而不是大型CSV文件怎么样?这将由SAS在一次写入操作中写入,并降低在写入完成之前触发读取的风险。
let map = document.getElementById("loginframe") as HTMLObjectElement;
let insideDoc = map.contentDocument;