在许多文件上运行python脚本

2024-04-24 08:57:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组文件aaa_cntrl.txtbbb_cntrl.txt,…zzz_cntrl.txt。我想运行python脚本脚本.py并生成输出aaa_out.txtbbb_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。 我该怎么做?你知道吗


Tags: inpytxt脚本issysoutthis
2条回答

我几天前刚刚用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。你知道吗

您需要循环所有输入文件并确定脚本中的输出名称,然后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

相关问题 更多 >