Mafft 仅使用 Python 创建一个文件
Mafft only creating one file with Python
所以我正在做一个项目来对齐序列 ID 和它的代码。我得到了一个条形码文件,其中包含一个 DNA 序列的标签,即 TTAGG。有几个标签(ATTAC、ACCAT 等)然后从序列文件中删除并放置在序列 ID 中。
示例:
sequence file --> SEQ 01 TTAGGAACCCAAA
barcode file --> TTAGG
我想要的输出文件将删除条形码并用它来创建一个新的fasta格式文件。
例子:
testfile.TTAGG 打开后应该有
>SEQ01
AACCCAAA
有几个这样的文件。我想获取我创建的每个文件并 运行 它们通过 mafft
,但是当我 运行 我的脚本时,它只集中在一个文件上 mafft
。我上面提到的文件可以正常显示,但是当 mafft
运行s 时,它只是 运行s 最后创建的文件。
这是我的脚本:
#!/usr/bin/python
import sys
import os
fname = sys.argv[1]
barcodefname = sys.argv[2]
barcodefile = open(barcodefname, "r")
for barcode in barcodefile:
barcode = barcode.strip()
outfname = "%s.%s" % (fname, barcode)
outf = open(outfname, "w+")
handle = open(fname, "r")
mafftname = outfname + ".mafft"
for line in handle:
newline = line.split()
seq = newline[0]
brc = newline[1]
potential_barcode = brc[:len(barcode)]
if potential_barcode == barcode:
outseq = brc[len(barcode):]
barcodeseq = ">%s\n%s\n" % (seq,outseq)
outf.write(barcodeseq)
handle.close()
outf.close()
cmd = "mafft %s > %s" % (outfname, mafftname)
os.system(cmd)
barcodefile.close()
我希望你说得够清楚了!请帮忙!我试过更改缩进,在关闭文件时进行调整。大多数时候它根本不会创建 .mafft
文件,有时它会创建但不会放入任何东西,但大多数情况下它只适用于最后创建的文件。
示例:
代码的开头创建文件,例如 -
testfile.ATTAC
testfile.AGGAC
testfile.TTAGG
然后当它 运行s mafft
它只创建
testfile.TTAGG.mafft
(输入正确)
我试过关闭 outf
文件然后再次打开它,它告诉我我正在强制它。
我已将 outf
文件更改为仅写入,不会更改任何内容。
mafft之所以只对齐最后一个文件file是因为它的执行是在循环外的。
按照您的代码,您在循环的每次迭代中创建一个输入文件名变量 (outfname),但该变量总是在下一次迭代中被覆盖。因此,当您的代码最终到达 mafft 执行命令时,outfname 变量将包含循环的最后一个文件名。
要更正此问题,只需在循环中插入 mafft 执行命令:
#!/usr/bin/python
import sys
import os
fname = sys.argv[1]
barcodefname = sys.argv[2]
barcodefile = open(barcodefname, "r")
for barcode in barcodefile:
barcode = barcode.strip()
outfname = "%s.%s" % (fname, barcode)
outf = open(outfname, "w+")
handle = open(fname, "r")
mafftname = outfname + ".mafft"
for line in handle:
newline = line.split()
seq = newline[0]
brc = newline[1]
potential_barcode = brc[:len(barcode)]
if potential_barcode == barcode:
outseq = brc[len(barcode):]
barcodeseq = ">%s\n%s\n" % (seq,outseq)
outf.write(barcodeseq)
handle.close()
outf.close()
cmd = "mafft %s > %s" % (outfname, mafftname)
os.system(cmd)
barcodefile.close()
所以我正在做一个项目来对齐序列 ID 和它的代码。我得到了一个条形码文件,其中包含一个 DNA 序列的标签,即 TTAGG。有几个标签(ATTAC、ACCAT 等)然后从序列文件中删除并放置在序列 ID 中。 示例:
sequence file --> SEQ 01 TTAGGAACCCAAA
barcode file --> TTAGG
我想要的输出文件将删除条形码并用它来创建一个新的fasta格式文件。 例子: testfile.TTAGG 打开后应该有
>SEQ01
AACCCAAA
有几个这样的文件。我想获取我创建的每个文件并 运行 它们通过 mafft
,但是当我 运行 我的脚本时,它只集中在一个文件上 mafft
。我上面提到的文件可以正常显示,但是当 mafft
运行s 时,它只是 运行s 最后创建的文件。
这是我的脚本:
#!/usr/bin/python
import sys
import os
fname = sys.argv[1]
barcodefname = sys.argv[2]
barcodefile = open(barcodefname, "r")
for barcode in barcodefile:
barcode = barcode.strip()
outfname = "%s.%s" % (fname, barcode)
outf = open(outfname, "w+")
handle = open(fname, "r")
mafftname = outfname + ".mafft"
for line in handle:
newline = line.split()
seq = newline[0]
brc = newline[1]
potential_barcode = brc[:len(barcode)]
if potential_barcode == barcode:
outseq = brc[len(barcode):]
barcodeseq = ">%s\n%s\n" % (seq,outseq)
outf.write(barcodeseq)
handle.close()
outf.close()
cmd = "mafft %s > %s" % (outfname, mafftname)
os.system(cmd)
barcodefile.close()
我希望你说得够清楚了!请帮忙!我试过更改缩进,在关闭文件时进行调整。大多数时候它根本不会创建 .mafft
文件,有时它会创建但不会放入任何东西,但大多数情况下它只适用于最后创建的文件。
示例: 代码的开头创建文件,例如 -
testfile.ATTAC
testfile.AGGAC
testfile.TTAGG
然后当它 运行s mafft
它只创建
testfile.TTAGG.mafft
(输入正确)
我试过关闭 outf
文件然后再次打开它,它告诉我我正在强制它。
我已将 outf
文件更改为仅写入,不会更改任何内容。
mafft之所以只对齐最后一个文件file是因为它的执行是在循环外的。
按照您的代码,您在循环的每次迭代中创建一个输入文件名变量 (outfname),但该变量总是在下一次迭代中被覆盖。因此,当您的代码最终到达 mafft 执行命令时,outfname 变量将包含循环的最后一个文件名。
要更正此问题,只需在循环中插入 mafft 执行命令:
#!/usr/bin/python
import sys
import os
fname = sys.argv[1]
barcodefname = sys.argv[2]
barcodefile = open(barcodefname, "r")
for barcode in barcodefile:
barcode = barcode.strip()
outfname = "%s.%s" % (fname, barcode)
outf = open(outfname, "w+")
handle = open(fname, "r")
mafftname = outfname + ".mafft"
for line in handle:
newline = line.split()
seq = newline[0]
brc = newline[1]
potential_barcode = brc[:len(barcode)]
if potential_barcode == barcode:
outseq = brc[len(barcode):]
barcodeseq = ">%s\n%s\n" % (seq,outseq)
outf.write(barcodeseq)
handle.close()
outf.close()
cmd = "mafft %s > %s" % (outfname, mafftname)
os.system(cmd)
barcodefile.close()