Python:运行os.system以匹配文件

时间:2017-08-03 06:10:14

标签: python operating-system wildcard glob

我想运行一个特定的命令,因为我的子目录中有匹配的文件。每个文件的名称都是这样的:sub-01_T1w,sub-02_T1w ....我试图运行的命令如下所示:“bet -F -m”。

编辑我的问题:每次运行脚本时都不会替换任何通配符。文件路径是正确的,但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)))

1 个答案:

答案 0 :(得分:0)

您可能误解了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,因为我发现它更清楚。这是一个风格问题,按你喜欢的方式做

修改:将os.system替换为subproces.callsuggested by STD