Python 字符串中的for循环

Python 字符串中的for循环,python,string,for-loop,Python,String,For Loop,我正试图用python编写一个脚本,使我的工作更容易。 我需要使用os.system调用外部软件的一些函数 有没有一种方法可以在这个字符串中插入for循环,而不必每次都写入obs\u dir[n] import os obs_dir = ['18185','18186','18187','19926','19987','19994','19995','20045','20046','20081'] xid = ['src21'] i=0 os.system("pset combine_spec

我正试图用python编写一个脚本,使我的工作更容易。 我需要使用
os.system
调用外部软件的一些函数

有没有一种方法可以在这个字符串中插入for循环,而不必每次都写入
obs\u dir[n]

import os
obs_dir = ['18185','18186','18187','19926','19987','19994','19995','20045','20046','20081']
xid = ['src21']
i=0

os.system("pset combine_spectra src_arfs=/"
          + obs_dir[0] + "/" + xid[i] + "_" + obs_dir[0] + "_spectrum.arf,"
          + "/" + obs_dir[1] + "/" + xid[i] + "_" + obs_dir[1] + "_spectrum.arf,"
          + "/" + obs_dir[2] + "/" + xid[i] + "_" + obs_dir[2] + "_spectrum.arf,"
          + "/" + obs_dir[3] + "/" + xid[i] + "_" + obs_dir[3] + "_spectrum.arf,"
          + "/" + obs_dir[4] + "/" + xid[i] + "_" + obs_dir[4] + "_spectrum.arf,"
          + "/" + obs_dir[5] + "/" + xid[i] + "_" + obs_dir[5] + "_spectrum.arf,"
          + "/" + obs_dir[6] + "/" + xid[i] + "_" + obs_dir[6] + "_spectrum.arf,"
          + "/" + obs_dir[7] + "/" + xid[i] + "_" + obs_dir[7] + "_spectrum.arf,"
          + "/" + obs_dir[8] + "/" + xid[i] + "_" + obs_dir[8] + "_spectrum.arf,"
          + "/" + obs_dir[9] + "/" + xid[i] + "_" + obs_dir[9] + "_spectrum.arf")

您可以通过首先迭代列表(obs_dir)并形成字符串来创建所需的命令

Ex:

import os
obs_dir = ['18185','18186','18187','19926','19987','19994','19995','20045','20046','20081']
xid = ['src21']


s = "pset combine_spectra src_arfs="
for i in obs_dir:
    s += "/{0}/{1}_{0}_spectrum.arf, ".format(i, xid[0])

s = s.strip().rstrip(',')
print s
#os.system(s)

我想这可能是你想要的

导入操作系统
obs_dir=['18185'、'18186'、'18187'、'19926'、'19987'、'19994'、'19995'、'20045'、'20046'、'20081']
xid=['src21']
str_cmd=“pset combine_spectrum src_arfs=“+obs_dir[0]
分隔符=“”
用于obs_目录中的目录
str_cmd+=分隔符+“/”+dir+“/”+xid[i]+““+dir+”\u spectrum.arf”
分隔符=“,”

os.system(str_cmd)
不在字符串中,但我们可以使用列表理解(在本例中为生成器表达式)和字符串连接等功能构建字符串:

obs_dir = ['18185','18186','18187','19926','19987','19994','19995','20045','20046','20081']
xid = ['src21']
i = 0

print("pset combine_spectra src_arfs=" +
    ",".join("/{0}/{1}_{0}_spectrum.arf".format(n,xid[i])
             for n in obs_dir))

您有
xid[i]
,但没有
i
,因此使用
xid[0]

"/{}/{}_{}_spectrum.arf".format(obs_dir[1],xid[0],obs_dir[1])
给予

'/18186/src21_18186_spectrum.arf'
因此,
format
有帮助。 另外,
join
将有助于将这些字符串连接成逗号分隔的字符串:

",".join(['a', 'b'])
给予

把这些结合在一起,你会得到

s = ",".join(["/{}/{}_{}_spectrum.arf".format(o,xid[0],o) for o in obs_dir])
提供所需的参数

没有备用的
,”

然后使用它

os.system("pset combine_spectra src_arfs=" + s)

在此字符串中插入for循环。。。你的意思是围绕字符串的循环我只需要运行一次
os.system(…)
。首先生成字符串,然后使用it@OmarEinea. 谢谢
'/18185/src21_18185_spectrum.arf,/18186/src21_18186_spectrum.arf,/18187/src21_18g187_spectrum.arf,/19926/src21_19926_spectrum.arf,/19987/src21_19987_spectrum.arfg,/19994/src21_19994_spectrum.arf,/19995/src21_19995_spectrum.arf,/20045/src21_20g045_spectrum.arf,/20046/src21_20046_spectrum.arf,/20081/src21_20081_spectrum.arfg'
os.system("pset combine_spectra src_arfs=" + s)