微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Pyhton 中访问类中的对象

如何解决在 Pyhton 中访问类中的对象

我有一个来自 Biopython 包的名为 SeqRecord 的对象。

此对象包含以下格式的信息:

ID: chr1_8969882_-:chr1_568670_-:a1;113
Name: chr1_8969882_-:chr1_568670_-:a1;113
Description: chr1_8969882_-:chr1_568670_-:a1;113 total_counts: 7600 Seed: 225 K: 20 length: 86
Number of features: 0
Seq('CACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGT...ACC',SingleLetteralphabet())

因此它包含一个序列 Seq 和一些其他属性IDNameDescription

我想要的是计算序列中不同数量的字母。类似的东西:

Secuencia 0:
Number of A´s:
Number of C´s:
Number of G´s:
Number of T´s:

到目前为止我做了什么?

这些对象通常有多个序列,所以我的想法是首先选择所有序列,然后计算每个序列的出现次数

sequences=[]
for line in object:
   if line.startswith ("Seq"):
      sequences.append(line)

但这会弹出下一条消息:

'SeqRecord' object has no attribute 'startswith'

我也尝试过其他方法,但大多数 python 方法都不能使用这个对象类。

知道如何用基本的 python 解决这个问题吗?*

PD: * SeqRecord 有一些方法可以让你轻松地做到这一点,但我想用基本的 Python 函数来做到这一点

解决方法

sequences=[]
for line in object:
   if line.startswith ("Seq"):
      sequences.append(line)

根据错误消息,它听起来像 object(在 Python 程序中这是一个错误的变量名,因为它隐藏了内置的 object 类型——重命名这个!!!)是一个可迭代的SeqRecord 个对象,而不是可迭代的字符串。 (您将 SeqRecord 对象本身与 print 时生成的字符串混淆了 - 一般来说,针对实际对象提供的方法进行编码比编写大量额外的代码来解析它的字符串表示。)要获得 Seq 对象,你会这样做:

sequences = [record.seq for record in object]

(同样,假设您的 SeqRecords 列表名为 object 它不应该是,但是您没有提供将其分配给的代码部分那个名字让我能够修复它。)

但是由于 SeqRecord 本身实现了对 Seq 中字母的迭代(如果我正确阅读 the documentation),您可以简单地计算每个序列中每个字母的出现次数在 collections.Counter 上使用 SeqRecord,而无需执行从每个 seq 中提取 from collections import Counter for i,sequence in enumerate(object): # again,DO NOT EVER NAME OBJECTS 'object' print(f"Secuencia {i}:") for letter,count in Counter(sequence).items(): print(f"Number of {letter}'s: {count}") 的额外步骤:

{{1}}
,

您应该提供您的输入 SeqRecord

我创建了一个

在这里查看:Asking Better Questions

使用Biopython:


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 31 16:37:39 2020

@author: Pietro
"""




from Bio.Seq import Seq

from Bio.SeqRecord import SeqRecord

from collections import Counter

seqrecordmine = SeqRecord(Seq("CACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGT"),id="chr1_8969882_-:chr1_568670_-:a1;113",name=" chr1_8969882_-:chr1_568670_-:a1;113",description=" chr1_8969882_-:chr1_568670_-:a1;113 total_counts: 7600 Seed: 225 K: 20 length: 86")


print(seqrecordmine)

for letter,count in Counter(seqrecordmine.seq).items(): #SeqRecord.seq = seq is a property of SeqRecord objects/Class
        print(f"Number of {letter}'s: {count}")

结果:

ID: chr1_8969882_-:chr1_568670_-:a1;113
Name:  chr1_8969882_-:chr1_568670_-:a1;113
Description:  chr1_8969882_-:chr1_568670_-:a1;113 total_counts: 7600 Seed: 225 K: 20 length: 86
Number of features: 0
Seq('CACTCATGAGCTGTCCCCACATTAGGCTTAAAAACAGATGCAATTCCCGGACGT')
Number of C's: 16
Number of A's: 16
Number of T's: 12
Number of G's: 10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。