Python: 运行 os.system 用于匹配文件
Python: Run os.system for matching files
只要我的子目录中有匹配的文件,我就想 运行 执行一个特定的命令。每个文件都这样命名:sub-01_T1w、sub-02_T1w …。我正在尝试 运行 的命令如下所示:“bet -F -m”。
编辑 我的问题:每次我 运行 脚本 none 的通配符都会被替换。文件路径是正确的,但是 os 命令每次都是 sub-[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
的工作原理。它根据您作为参数提供的模式计算文件路径列表。
您不应该将 os.system
的结果传递给 glob.glob
,这可能不是您想要的。
尝试用这样的方式解决您的问题:
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.call
,如
只要我的子目录中有匹配的文件,我就想 运行 执行一个特定的命令。每个文件都这样命名:sub-01_T1w、sub-02_T1w …。我正在尝试 运行 的命令如下所示:“bet -F -m”。
编辑 我的问题:每次我 运行 脚本 none 的通配符都会被替换。文件路径是正确的,但是 os 命令每次都是 sub-[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
的工作原理。它根据您作为参数提供的模式计算文件路径列表。
您不应该将 os.system
的结果传递给 glob.glob
,这可能不是您想要的。
尝试用这样的方式解决您的问题:
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.call
,如