Python:运行os.system以匹配文件
问题描述:
我想运行一个特定的命令,因为我的子分区中有匹配的文件。每个文件都是这样命名的:sub-01_T1w,sub-02_T1w ...。我试图运行的命令如下所示:“bet -F -m”。Python:运行os.system以匹配文件
编辑我的问题:每次运行脚本时,都不会替换通配符。文件路径是正确的,但os命令每次都是子[0-9] [0-9]而不是:sub-01,sub-02,...。
我第一次尝试是这样的:
import glob
import os
path = '/home/nico/Seminar/demo_fmri/'
subdirs = glob.glob('%s/sub-[0-9][0-9]'%(path))
for dir in subdirs:
print dir
glob.glob(os.system("bet %s/anat/sub-[0-9][0-9]_T1w %s/anat/sub-[0-9][0-9]_T1w_brain -F -m"%(dir,dir)))
答
你可能误会了怎么glob.glob
作品。它根据作为参数给出的模式计算文件路径列表。
你不应该传给glob.glob
os.system
的结果,这可能不是你想要做的。
尝试用这样的解决你的问题:
import glob
import os
import subprocess
path = '/home/nico/Seminar/demo_fmri/'
subdirs = glob.glob(os.path.join(path, 'sub-[0-9][0-9]'))
for dir in subdirs:
print dir
for file in glob.glob(os.path.join(dir, 'anat/sub-[0-9][0-9]_T1w')):
subprocess.call(['bet', file, file+'_brain', '-f', '-m'])
奖励:%s
在需要时支持os.path.join
被拆除。另外,我在最后一行使用了str.format
,因为我发现它更清晰。这是一个风格问题,做你喜欢
编辑:取代subproces.call
os.system
,为suggested by STD
所以...什么是你的问题? – yuhow5566
我在这里找不到问题。你的尝试是否奏效?如果不是,它是如何失败的?它有什么作用?有错误吗?它是什么?如果你愿意,我还有更多的问题......但最好是完全重写这个问题 –