修改python脚本以运行多个输入文件

修改python脚本以运行多个输入文件,python,filenames,Python,Filenames,我对python非常陌生,我有一个python脚本来运行一个特定的文件(input1.txt)并生成一个输出(output1.fasta),但是我想对多个文件运行这个脚本,例如:input2.txt,input3.txt…并生成相应的输出:output2.fasta,output3.fasta from Bio import SeqIO fasta_file = "sequences.txt" wanted_file = "input1.txt" result_file = "output

我对python非常陌生,我有一个python脚本来运行一个特定的文件(input1.txt)并生成一个输出(output1.fasta),但是我想对多个文件运行这个脚本,例如:input2.txt,input3.txt…并生成相应的输出:output2.fasta,output3.fasta

from Bio import SeqIO

fasta_file = "sequences.txt" 
wanted_file = "input1.txt" 
result_file = "output1.fasta" 

wanted = set()
with open(wanted_file) as f:
    for line in f:
        line = line.strip()
        if line != "":
            wanted.add(line)
fasta_sequences = SeqIO.parse(open(fasta_file),'fasta')
with open(result_file, "w") as f:
    for seq in fasta_sequences:
        if seq.id in wanted:
            SeqIO.write([seq], f, "fasta")
我试图添加glob函数,但不知道如何处理输出文件名

from Bio import SeqIO
import glob

fasta_file = "sequences.txt"

for filename in glob.glob('*.txt'):

    wanted = set()
    with open(filename) as f:
        for line in f:
            line = line.strip()
            if line != "":
                wanted.add(line)

    fasta_sequences = SeqIO.parse(open(fasta_file),'fasta')
    with open(result_file, "w") as f:
        for seq in fasta_sequences:
            if seq.id in wanted:
                SeqIO.write([seq], f, "fasta")

错误消息是:NameError:name'result_file'未定义

您的
glob
当前正在提取您的“序列”文件以及输入,因为
*.txt
包括
序列.txt
文件。如果“fasta”文件总是相同的,并且您只想迭代输入文件,那么您需要

for filename in glob.glob('input*.txt'):
另外,要迭代整个过程,可能需要将其放在一个方法中。如果输出文件名总是创建为与输入相对应,则可以动态创建该文件名

from Bio import SeqIO

def create_fasta_outputs(fasta_file, wanted_file):
    result_file = wanted_file.replace("input","output").replace(".txt",".fasta")

    wanted = set()
    with open(wanted_file) as f:
        for line in f:
            line = line.strip()
            if line != "":
                wanted.add(line)
    fasta_sequences = SeqIO.parse(open(fasta_file),'fasta')
    with open(result_file, "w") as f:
        for seq in fasta_sequences:
            if seq.id in wanted:
                SeqIO.write([seq], f, "fasta")

fasta_file = "sequences.txt"
for wanted_file in glob.glob('input*.txt'):
    create_fasta_outputs(fasta_file, wanted_file)

您的
glob
当前正在提取您的“序列”文件以及输入,因为
*.txt
包括
sequences.txt
文件。如果“fasta”文件总是相同的,并且您只想迭代输入文件,那么您需要

for filename in glob.glob('input*.txt'):
另外,要迭代整个过程,可能需要将其放在一个方法中。如果输出文件名总是创建为与输入相对应,则可以动态创建该文件名

from Bio import SeqIO

def create_fasta_outputs(fasta_file, wanted_file):
    result_file = wanted_file.replace("input","output").replace(".txt",".fasta")

    wanted = set()
    with open(wanted_file) as f:
        for line in f:
            line = line.strip()
            if line != "":
                wanted.add(line)
    fasta_sequences = SeqIO.parse(open(fasta_file),'fasta')
    with open(result_file, "w") as f:
        for seq in fasta_sequences:
            if seq.id in wanted:
                SeqIO.write([seq], f, "fasta")

fasta_file = "sequences.txt"
for wanted_file in glob.glob('input*.txt'):
    create_fasta_outputs(fasta_file, wanted_file)

到底是什么“不起作用”?在尝试使用glob之后,您可以显示您的代码吗?什么东西不能使用glob?请具体说明,以便我们可以提供帮助。对不起,我用错误消息更新了我的问题,等等。您需要在某个时候定义
结果文件
变量。请参阅我对您当前使用
glob
的问题的回答,以及如何基于
想要的文件名创建
result\u文件名(如您之前所称的变量)。到底什么是“不起作用的”?在尝试使用glob之后,您可以显示您的代码吗?什么东西不能使用glob?请具体说明,以便我们可以提供帮助。对不起,我用错误消息更新了我的问题,等等。您需要在某个时候定义
结果文件
变量。请参阅我对您当前使用
glob
的问题的回答,以及如何基于
想要的\u文件
名称创建
结果文件
名称(如您之前所称的变量)。是的,我的fasta\u file=“sequences.txt”对于所有输入文件都是相同的。您的命令正在运行,没有任何错误,但没有创建任何输出。您是否有
sequences.txt
input1.txt
文件的示例数据?既然脚本将运行,那么脚本中的一些逻辑可能会失效,例如
if-line!=“”:
如果需要中的seq.id:
导致缺少输出。你是对的,是我的错。命令正在运行!非常感谢。是的,我的fasta_file=“sequences.txt”对于所有输入文件都是相同的。您的命令正在运行,没有任何错误,但没有创建任何输出。您是否有
sequences.txt
input1.txt
文件的示例数据?既然脚本将运行,那么脚本中的一些逻辑可能会失效,例如
if-line!=“”:
如果需要中的seq.id:
导致缺少输出。你是对的,是我的错。命令正在运行!谢谢。