生成多个类似脚本或文件的最简单方法是什么?

时间:2014-01-10 15:44:33

标签: python matlab vim sed

我一直在向群集提交多个matlab脚本作为数组作业,这是有效的。但是我一直在手动生成每个脚本!比方说x = 1:1000,我想改变:

filename = foo_x.m

和mscript中的参数

a = x;
b = 'x_1';
c = 'x_2';

即。任务是生成多个完全相同的文件,除了它们的x值。 x出现在脚本和文件名中。

我对python,sed和vim有一点经验。有关解决此类任务或任何教程的最佳方法的任何建议吗?

2 个答案:

答案 0 :(得分:3)

使用diary在Matlab中快速解决方案:

for x = 1:1000
    diary(['foo_' num2str(x) '.m' ])
    disp(['a = ' num2str(x) ';'])
    disp(['b = ''' num2str(x) '_1'';'])
    disp(['c = ''' num2str(x) '_2'';'])
    diary off
    disp(' ')
end

如果您需要“foo_0001.m”形式的文件名(即填充左边的零号),请将循环中的第一行替换为

    diary(['foo_' num2str(x,'%.4d') '.m' ])

答案 1 :(得分:2)

Python解决方案

使用str.format

在以下代码template中包含{0}。把它想象成占位符。使用str.format,您可以使用str.format的第一个参数替换参数。

template = '''
a = {0};
b = '{0}_1';
b = '{0}_2';
'''

for x in range(1, 1000+1): # loop from 1 to 1000
    with open('foo_{}.m'.format(x), 'w') as f: # Open file ("w"rite mode)
        f.write(template.format(x)) # render the template string
                                    #  replacing placeholder (`{0}`)

如果您希望文件名看起来像foo_{}.m而不是foo_{:04}.m,请将foo_0012.m替换为foo_12.m