如何使用 python 命令行将多个文件(.nii 格式)作为输入文件传递?

How to pass multiple files(.nii format) as input file using python command line?

我有一个包含 20 个 .nii 文件的文件夹。需要将其转换为 png,因此使用 python nii2png.py 相同。 nii2png.py This is the file I am making changes in. Here are 2 files for your reference: Here 这些是 2 个 .nii 文件。 它具有以下语法:

!python nii2png.py -i <input file> -o <output folder>

如何在循环或其他解决方案中传递这 20 个 .nii 文件? 这是 nii2png 文件的开头:

import numpy, shutil, os, nibabel
import sys, getopt
import scipy.misc
import imageio
import argparse

def main(argv):
inputfile = ''
outputfile = ''

try:
    opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
    print('nii2png.py -i <inputfile> -o <outputfile>')
    sys.exit(2)
for opt, arg in opts:
    if opt == '-h':
        print('nii2png.py -i <inputfile> -o <outputfile>')
        sys.exit()
    elif opt in ("-i", "--input"):
        inputfile = arg
    elif opt in ("-o", "--output"):
        outputfile = arg

print('Input file is ', inputfile)
print('Output folder is ', outputfile)

请忽略函数的缩进。

可能更好的计划是为输出文件夹设置一个 -o 参数,并将命令行的其余部分作为输入文件名,而不是使用单个 -i 参数。现在您可以指定 nli2png.py -o xxx a*.png b*.png left/c*.png.

之类的内容
import numpy, shutil, os, nibabel
import sys
import scipy.misc
import imageio

def main(argv):
    if not argv:
        print('nii2png.py -o <outputfolder> <input> <input>...')
        sys.exit()

    grab = 0
    outputfolder = '.'
    inputfiles = []
    for arg in argv:
        if arg == '-o':
            grab = 1
        elif grab:
            outputfolder = arg
            grab = 0
        else:
            inputfiles.append(arg)

    print('Input files are ', inputfiles)
    print('Output folder is ', outputfolder)

main(sys.argv[1:])

您可以使用 argparse。

import argparse

def main():
    parser = argparse.ArgumentParser(description='Convert files, syntax: nii2png.py -i <inputfile> -o <outputfile>')
    parser.add_argument('-i', '--inputfiles', nargs='+', help='Paths of input files.')
    parser.add_argument('-o', '--outputfolder', default='', help='Output folder.')
    args = parser.parse_args()

    print(f'Input files: {args.inputfiles}')
    print(f'Output folder: {args.outputfolder}')
    
        
if __name__ == "__main__":
    main()