我有一组文件aaa_cntrl.txt
,bbb_cntrl.txt
,.... zzz_cntrl.txt
。我想在每个文件上运行python脚本script.py并生成输出aaa_out.txt
,bbb_out.txt
,.... zzz_out.txt
。
我的python脚本是
import sys
file_in = sys.argv[0]
file_out = sys.argv[1]
print "This is the input file", file_in
print "This is the output file", file_out
命令行为python script.py aaa_cntrl.txt aaa_out.txt
但我想自动将输入指定为*_cntrl.txt
并将输出设为*_out.txt
。
我该怎么做?
答案 0 :(得分:0)
你需要遍历所有输入文件并确定脚本中的输出名称,然后你的shell(至少在linux / unix上)会为你扩展通配符。
import sys
for file_in in sys.argv[1:]:
# probably some more reliable way is required here in production
file_out = file_in.split('_', 1)[0] + '_out.txt'
print "This is the input file", file_in
print "This is the output file", file_out
答案 1 :(得分:0)
我前几天刚刚使用argparse
完成了这项工作。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('files', nargs='+')
args = parser.parse_args()
for f in args.files:
process(f)
然后,只需要用./myscript.py *_cntrl.txt
调用你的脚本,你的shell就会执行扩展,正如Willem Van Onsem在评论中指出的那样。
您还可以查看argparse.FileType
以改进此代码。
如果您的文件名格式良好,我建议您根据输入文件自动创建输出文件的名称。
我的意思是,如果xxx_cntrl.txt
始终转换为xxx_out.txt
,您只需执行file_out = file_in.replace("cntrl", "out")
。
否则,您可以执行类似
的操作parser.add_argument('files', nargs='+')
parser.add_argument('-o', nargs='+')
args = parser.parse_args()
for in_file, out_file in zip(args.file, args.o):
process(in_file, out_file)
无论如何,我真的建议您使用argparse
模块,而不是手动解析sys.argv
。