我写了一个python脚本,它调用两个文件来执行一些计算,并要求新文件的名称放置计算,所以我的代码运行如下:
python code.py in_file1 in_file2 outfile
现在,我有几个需要相同计算的文件,它们的名称只会被最后一个数字改变,所以我想做一个脚本,在文件夹中获取所需的不同文件,执行python脚本并命名输出仅更改根据给定的in_file1的las编号(infield_2实际上没有改变)。
我尝试了一些简单但不起作用的事情
#!/bin/bash
python code.py in_file[19]* infile_2 outfile[19]*
我从python的使用中得到一个错误,说明用法:in2中无法识别的参数中的python code.py [-h]
我确信code.py可以正常工作,我只想一次做一个文件。谢谢。我是python和linux的新手,感谢您提供的任何帮助。
答案 0 :(得分:1)
你可以在Python中做同样的事情
from subprocess import call
fname="in_file{} infile2 outfile{}"
for x in xrange(1,11):
d=call(["python","code.py",fname.format(x,x)])
if d:
print "Error executing: {}".format(d)
如果您执行以下
fname="in_file{}"
for x in xrange(1,11):
print ["python","code.py",fname.format(x)]
将打印以下内容
['python', 'code.py', 'in_file1']
['python', 'code.py', 'in_file2']
['python', 'code.py', 'in_file3']
['python', 'code.py', 'in_file4']
['python', 'code.py', 'in_file5']
['python', 'code.py', 'in_file6']
['python', 'code.py', 'in_file7']
['python', 'code.py', 'in_file8']
['python', 'code.py', 'in_file9']
['python', 'code.py', 'in_file10']
答案 1 :(得分:1)
shell只是在那里展开通配符in_file[19]*
,然后进入所有匹配文件的列表。这里没有循环。如果你想要一个循环,你需要一个显式的循环,比如
#!/bin/bash
for file in in_file[19]*; do
python code.py "$file" infile_2 "out${file#in}"
done
其中变量file
依次分配给每个匹配的文件,变量替换${var#prefix}
扩展为var
的值,其中删除了任何字符串prefix
开始。
顺便提一下,如果您python
可执行,code.py
是多余的,并确保它具有正确的shebang line。
另请注意,[19]
与单个字符匹配,因此您的通配符会匹配名称以in_file1
或in_file9
开头但不包含其他文件的所有文件。我推测可能不是你的意思。
答案 2 :(得分:0)
您可以在python中执行此操作:
import os
name = "in_file%d"
for i in range(1, 21):
os.system("python code.py in_file{} in_file2 outfile{}".format(i, i))
如下所示,os
库调用输出的字符串:
>>> for i in range(1, 21):
... "python code.py in_file{} in_file2 outfile{}".format(i, i)
...
'python code.py in_file1 in_file2 outfile1'
'python code.py in_file2 in_file2 outfile2'
'python code.py in_file3 in_file2 outfile3'
'python code.py in_file4 in_file2 outfile4'
'python code.py in_file5 in_file2 outfile5'
'python code.py in_file6 in_file2 outfile6'
'python code.py in_file7 in_file2 outfile7'
'python code.py in_file8 in_file2 outfile8'
'python code.py in_file9 in_file2 outfile9'
'python code.py in_file10 in_file2 outfile10'
'python code.py in_file11 in_file2 outfile11'
'python code.py in_file12 in_file2 outfile12'
'python code.py in_file13 in_file2 outfile13'
'python code.py in_file14 in_file2 outfile14'
'python code.py in_file15 in_file2 outfile15'
'python code.py in_file16 in_file2 outfile16'
'python code.py in_file17 in_file2 outfile17'
'python code.py in_file18 in_file2 outfile18'
'python code.py in_file19 in_file2 outfile19'
'python code.py in_file20 in_file2 outfile20'
>>>