为批处理提供输入和输出文件?
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 文件中。如果是,脚本将打印出 title
和 seq
。但是对于每个输出文件,我希望名称与 .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)
我在一个目录中有 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 文件中。如果是,脚本将打印出 title
和 seq
。但是对于每个输出文件,我希望名称与 .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)