我有一个FASTA文件,在“description”行中定义了三个元素。你知道吗
第一个元素,定义为dato[0]
,是必须使用条件执行的元素,第三个元素,定义为dato[2]
,是我要求和的元素。
FASTA描述行如下:
PIN4 HOIAQKS02C4SWQ 1761
PIN1 HOIAQKS02D3JZ3 572
我想求一行中执行条件dato[0] == PIN1
的值(dato[2]
)和另一行中执行条件dato[0] == PIN4
的值之和。你知道吗
我正在使用以下代码:
from Bio import SeqIO
secuencias=SeqIO.parse("/Users/imac/Desktop/Pruebas_UniFrac/otu1_alpin1+4.fasta", "fasta")
PIN_records=list(SeqIO.parse("/Users/imac/Desktop/Pruebas_UniFrac/otu1_alpin1+4.fasta", "fasta")
archivo1=open("/Users/imac/Desktop/Pruebas_UniFrac/pruebaalpin1+4_fin.fasta", "w")
archivo2=open("/Users/imac/Desktop/Pruebas_UniFrac/pruebaalpin1+4_seqsotus.fasta", "w")
archivo3=open("/Users/imac/Desktop/Pruebas_UniFrac/pruebaalpin1+4_sumas.fasta", "w")
x = 0
y = x+1
for linea in secuencias:
dato = linea.description.split(" ")
seqs = str(linea.seq)
if dato[0] != "PIN1":
if dato[0] != "PIN4":
if dato[0] == "consensus":
archivo1.write("hacia arriba OTU" + str(y) + "\n" + "x" + "\n" + "x" + "\n")
archivo2.write(">" + "OTU" + str(y) + "\n" + seqs + "\n")
archivo3.write("fin del OTU" + "\n")
y = y+1
else:
archivo1.write(str(dato[0]) + "," + str(dato[2]) + "\n")
#num = int(dato[2])
#archivo3.write("PIN4=" + str(sum(dato[2])) + "\n")
#archivo3.write("PIN4=%d\n" % sum(dato[2]))
archivo3.write("PIN4={}\n".format(sum(dato[2])))
else:
archivo1.write(str(dato[0]) + "," + str(dato[2]) + "\n")
#num = int(dato[2])
#archivo3.write("PIN1=" + str(sum(dato[2])) + "\n")
#archivo3.write("PIN1=%d\n" % sum(dato[2]))
archivo3.write("PIN1={}\n".format(sum(dato[2])))
archivo1.close()
archivo2.close()
archivo3.close()
当我这么做的时候,我得到了这个错误信息:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
在遵循后面的注释之后,我在代码中引入了更改,但是我无法使它正常工作,我不知道如何修复它。你知道吗
多谢了
使用此代码,我得到以下错误:
File "./lectura_msaout_pruebaalpin1+4_final.py", line 16
archivo1=open("/Users/imac/Desktop/Pruebas_UniFrac/pruebaalpin1+4_fin.fasta", "w")
^
SyntaxError: invalid syntax
您的代码有两个主要问题。你知道吗
sum()
。你知道吗固定总和
您想要对一个可数的数值求和,因为字符串值的求和是未定义的。通过对每个值调用
int()
(使用map()
函数)可以将字符串值转换为整数。你知道吗示例:
应用到您的代码
您真的要对
dato[2]
的个位数求和吗?它看起来像这样:修复字符串格式
不能将整数追加到字符串(请参见Python String and Integer concatenation)。你知道吗
解决方案是在串联之前将整数转换为字符串,或者在字符串中格式化整数。在您的案例中,解决方案如下所示:
转换为字符串:
使用字符串格式:
使用newstyle格式:
最后,我在'for'循环外创建了计数器,创建了一个sum,但没有'sum'命令,并且在'str'和'int'之间进行了更改,从而解决了我的问题。我的“几乎完成”完整代码如下:
我希望有人能发现这个代码有帮助。 谢谢你的帮助。你知道吗
相关问题 更多 >
编程相关推荐