2010-11-15 179 views
3

我有一个创建.csv的SAS进程。我有另一个Python进程,等待文件存在,然后对该文件执行某些操作。我想确保在SAS写完文件之前,Python进程不会开始做它的事情。如何在Windows XP上使用SAS重命名文本文件?

我想我会让SAS创建.csv,然后在完成后重命名文件。我可以在SAS中进行重命名吗?然后python进程可以等待,直到重命名的文件存在。

编辑:我不小心发布了这个问题两次,然后意外删除了两个版本。对于那个很抱歉。

回答

0

您可以在SAS数据集中生成输出,然后只有在完成后才写入.csv文件。不知道你如何创建CSV,但我通常只是这样做:

data _null_; 
file './ouptut_file.csv' dlm=','; 
set dataset_name; 
put var1 var2; 
run; 

如果你这样做,在你的SAS代码的结尾,不会产生csv文件,直到你完成操纵数据。

+0

这是我目前在做什么,但我想这可能是一个问题,因为该.csv文件非常大,所以一旦开始SAS写入文件,蟒蛇可以检测该文件存在,在sas完成写作之前开始使用它。 – oob 2010-11-15 01:58:14

2

我觉得比重命名更好的是编写一个执行SAS程序的shell脚本,然后只有在SAS程序退出后才执行Python脚本而没有错误。这个语法根据您的操作系统而有所不同,但不会太困难。

0

有多种方法可以做到这一点。

Python脚本是否仅监视.csv文件?或者当在该目录中创建任何新文件时它会被触发?

  1. 如果只会触发为.csv,那么你可以简单地输出到,比方说,一个.txt文件,然后使用x声明(OS命令),或重命名功能@cmjohns建议将其重命名。

  2. 另一种选择是,您可以将.csv文件输出到不同的目录,然后将其移动到python正在监视的目录中。只要文件在同一个磁盘中,移动文件将立即完成。

  3. 你也可以修改python脚本仅查找的.csv,然后再做选择1

  4. 你甚至可以为Python检查创建“标志”文件时,SAS公司已经与完成。 CSV。

但是如果可能的话,我想我会用@jgunnink去。

0

如何让观看程序监视单独的小文件而不是大的CSV文件?这将由SAS写入一次写入操作,并降低在写入完成之前触发读取的风险。

data _null_; 
    file 'bigfile.csv' dsd ; 
    set bigdata; 
    put (_all_) (+0); 
run; 
data _null_; 
    file 'bigfile.txt' ; 
    put 'bigfile.csv written'; 
run;