首页 > 解决方案 > 在 Python 中使用 2 FOR 制作列表/表格

问题描述

我做了一个程序,在出口处就是这样

A       Alanina
B       Ácido aspártico ou Asparagina
C       Cisteína
D       Ácido aspártico
E       Ácido glutâmico
F       Fenilalanina
G       Glicina
H       Histidina
I       Isoleucina
J       Leucina (L) ou Isoleucina
K       Lisina
L       Leucina
M       Metionina
N       Asparagina
O       Pirrolisina
P       Prolina
Q       Glutamina
R       Arginina
S       Serina
T       Treonina
U       Selenocisteína
V       Valina
W       Triptofano
X       qualquer
Y       Tirosina
33
0
4
26
32
14
38
14
26
0
25
36
15
16
0
19
15
16
14
20
0
32
0
11

但我希望这些数字位于字母和单词列旁边,类型看起来像的列表

-A ------ Alanina -------- A出现的次数

-B ------ 天冬氨酸或天冬酰胺 -------- B 出现的次数

它从 e.coli.fasta.txt 文件中获取信息:

>sp|A1AA21|PEPT_ECOK1 Peptidase T OS=Escherichia coli O1:K1 / APEC OX=405955 GN=pepT PE=3 SV=1
MDKLLERFLNYVSLDTQSKAGVRQVPSTEGQWKLLHLLKEQLEEMGLINVTLSEKGTLMA
TLPANVPGDIPAIGFISHVDTSPDCSGKNVNPQIVENYRGGDIALGIGDEVLSPVMFPVL
HQLLGQTLITTDGKTLLGADDKAGIAEIMTALAVLQQKNIPHGDIRVAFTPDEEVGKGAK
HFDVDAFDARWAYTVDGGGVGELEFENFNAASVNIKIVGNNVHPGTAKGVMVNALSLAAR
IHAEVPADESPEMTEGYEGFYHLASMKGTVERADMHYIIRDFDRKQFEARKRKMMEIAKK
VGKGLHPDCYIELVIEDSYYNMREKVVEHPHILDIAQQAMRDCDIEPELKPIRGGTDGAQ
LSFMGLPCPNLFTGGYNYHGKHEFVTLEGMEKAVQVIVRIAELTAQRK

这是程序代码:

f = open('e.coli.fasta.txt','r')
sequencia = f.readlines()
amino = [] #para colocar o arquivo numa lista só com o texto de interresse 

for linha in sequencia:
  if linha.find('>') != 0:
    amino.append(linha)

tfasta= "".join(amino)

aminoacidos = {}
aminoacidos = {'A':'Alanina','B':'Ácido aspártico ou Asparagina','C':'Cisteína', 'D':'Ácido aspártico','E':'Ácido glutâmico','F':'Fenilalanina','G':'Glicina','H':'Histidina','I':'Isoleucina','J':'Leucina (L) ou Isoleucina','K':'Lisina','L':'Leucina','M':'Metionina','N':'Asparagina','O':'Pirrolisina','P':'Prolina','Q':'Glutamina','R':'Arginina','S':'Serina','T':'Treonina','U':'Selenocisteína','V':'Valina','W':'Triptofano','X':'qualquer','Y':'Tirosina'}

def ocorrencias(string):
  result = {}
  chaves = 'ABCDEFGHIJKLMNOPQRSTUVXY'
  for i in chaves:
    result[i] = tfasta.count(i)
  return result  

ocor = (ocorrencias(tfasta))

with open ('PeptidadeT-aminoacidos','w') as p:
  for i in range(65,90):
    a = ('%s' % (chr(i)))
    p.write('{:4s}\t{:5s}\n'.format(a,(aminoacidos[a])))
  for e in ocor.values():
    p.write('{}\n'.format(e))

标签: python

解决方案


该变量ocor是一种称为字典[1] 的python 数据类型。在您的代码中,它由 {key: value} = {"aminoacido": ocorrencias} 组成。您可以使用氨基酸名称来获取出现次数,如下所示:ocor['A']它将返回 33。

f = open('e.coli.fasta.txt','r')
sequencia = f.readlines()
amino = [] #para colocar o arquivo numa lista só com o texto de interresse 

for linha in sequencia:
  if linha.find('>') != 0:
    amino.append(linha)

tfasta= "".join(amino)

aminoacidos = {}
aminoacidos = {'A':'Alanina','B':'Ácido aspártico ou Asparagina','C':'Cisteína', 'D':'Ácido aspártico','E':'Ácido glutâmico','F':'Fenilalanina','G':'Glicina','H':'Histidina','I':'Isoleucina','J':'Leucina (L) ou Isoleucina','K':'Lisina','L':'Leucina','M':'Metionina','N':'Asparagina','O':'Pirrolisina','P':'Prolina','Q':'Glutamina','R':'Arginina','S':'Serina','T':'Treonina','U':'Selenocisteína','V':'Valina','W':'Triptofano','X':'qualquer','Y':'Tirosina'}

def ocorrencias(string):
  result = {}
  chaves = 'ABCDEFGHIJKLMNOPQRSTUVWXY'
  for i in chaves:
    result[i] = tfasta.count(i)
  return result

ocor = ocorrencias(tfasta)

with open ('PeptidadeT-aminoacidos','w') as p:
  for i in range(65,90):
    a = ('%s' % (chr(i)))
    p.write('-{:4s}------{:5s}------{}\n'.format(a, aminoacidos[a], ocor[a]))

这里只是一个旁注:它缺少字母 W on chaves,我只是添加它以防止KeyError. 如果不需要,您可以在 p.write 上添加 try/except 子句。

chaves = 'ABCDEFGHIJKLMNOPQRSTUVWXY'

[1] https://realpython.com/python-dicts/


推荐阅读