修改python脚本以运行多个输入文件
我对python非常陌生,我有一个python脚本来运行一个特定的文件(input1.txt)并生成一个输出(output1.fasta),但是我想对多个文件运行这个脚本,例如:input2.txt,input3.txt…并生成相应的输出:output2.fasta,output3.fasta修改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
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:
导致缺少输出。你是对的,是我的错。命令正在运行!谢谢。