为批处理提供输入和输出文件?

Giving input and output files for batch processing?

我在一个目录中有 100 多个 .txt 文件,我想 运行 为每个文件使用相同的 python 脚本。现在我必须键入类似的命令超过 100 次,因为每个命令都有细微的差异,因为输入和输出文件名不同。我想知道这是否可以自动完成。

我的代码如下所示:

import pandas as pd
import numpy as np
import os
import argparse

parser = argparse.ArgumentParser(description='Excelseq ')
parser.add_argument('-i','--txt', help='Input file name',required=True)
parser.add_argument('-o','--output',help='output file name', required=True)
args = parser.parse_args()

df = pd.read_csv(args.txt, sep='\t' )
f=open('VD.fasta', "r+")
out = open(args.output, "w")

for line in f:
    title = line[1:]
    title = title.rstrip()

    seq = f.readline()
    seq = seq.rstrip()

    if  df['ReadID'].str.contains(title).any():
        out.write('>{0}\n{1}\n'.format(title,seq))

代码接受 1 个输入文件:df-i 给出,它是一个 .txt 文件,脚本检查 .txt 文件中的 ReadID 是否在 .fasta 文件中。如果是,脚本将打印出 titleseq。但是对于每个输出文件,我希望名称与 .txt 文件相同,但扩展名为 .fasta。

例如:

input file1 : H100.txt
output file1: H100.fasta

input file2 : H101.txt
output file2: H101.fasta

input file3: H102.txt
output file3: H102.fasta

...

我如何为超过 100 个文件自动执行此操作?每个 运行 都需要很长时间,我不想坐在电脑前等待它完成然后 运行 下一个。

我无法对此进行测试,因为我没有输入文件,也没有安装您安装的所有第三方模块。然而,它应该接近你应该做的,正如我在评论中试图解释的那样。

import glob
import numpy as np
import os
import pandas as pd
import sys

def process_txt_file(txt_filename, f):
    root, ext = os.path.splitext(txt_filename)
    fasta_filename = root + '.fasta'

    print('processing {} -> {}'.format(txt_filename, fasta_filename))

    df = pd.read_csv(txt_filename, sep='\t' )
    with open(fasta_filename, "w") as out:
        f.seek(0)  # rewind
        for line in f:
            title = line[1:].rstrip()
            seq = f.readline().rstrip()

            if  df['ReadID'].str.contains(title).any():
                out.write('>{0}\n{1}\n'.format(title, seq))

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('usage: {} <path-to-txt-files-directory>'.format(sys.argv[0]))
        sys.exit(2)

    with open('VD.fasta', "r+") as f:
        for input_filename in glob.glob(os.path.join(sys.argv[1], 'H*.txt'):
            process_txt_file(input_filename, f)