【问题标题】:How to create a dataset using sequence file in python如何在python中使用序列文件创建数据集
【发布时间】:2014-07-11 16:38:43
【问题描述】:

我有一个蛋白质序列文件,如下所示:

>102L:A       MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL       -------------------------------------------------------------------------------------------------------------------------------------------------------------------XX

第一个是序列的名称,第二个是实际的蛋白质序列,第一个是显示是否有缺失坐标的指示器。在这种情况下,请注意最后有两个“X”。这意味着序列的最后两个残基是“NL”,在这种情况下缺少坐标。

通过 Python 编码,我想生成一个如下所示的表格:

  1. 序列名称
  2. 缺失坐标的总数(即X的个数)
  3. 这些缺失坐标的范围(也就是那些X的位置范围) 4)序列的长度 5)实际顺序

所以最终结果应该是这样的:

>102L:A 2 163-164 164 MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL

到目前为止,我的代码如下所示:

total_seq = []
with open('sample.txt') as lines:
    for l in lines:
        split_list = l.split()

        # Assign the list number
        header = split_list[0]                                # 1
        seq = split_list[1]                                   # 5
        disorder = split_list[2]

        # count sequence length and total residue of missing coordinates
        sequence_length = len(seq)                            # 4

        for x in disorder:
            counts = 0
            if x == 'X':
                counts = counts + 1

        total_seq.append([header, seq, str(counts)])   # obviously I haven't finish coding 2 & 3

with open('new_sample.txt', 'a') as f:
    for lol in total_seq:
        f.write('\n'.join(lol))

我是python的新手,有人能帮忙吗?

【问题讨论】:

  • 你的问题到底是什么?
  • 您这样做是为了创建一个可以加载到 R 中的表?为什么不能将序列加载到 R 中?查看 SeqinR 包。
  • @jonrsharpe 我的问题是如何使用我最初拥有的序列文件创建一个看起来像我最终结果的文件。很抱歉造成混乱。
  • @Bill 不一定要加载到 R 中。我只是想创建一个看起来像我最终结果的文件。很抱歉造成混乱。
  • @Jlod888 答案是“写代码”;这个问题对 SO 来说太宽泛了

标签: python dataset bioinformatics


【解决方案1】:

这是您修改后的代码。它现在产生您想要的输出。

with open("sample.txt") as infile:
    matrix  = [line.split() for line in infile.readlines()]

    header_list  = [row[0] for row in matrix]
    seq_list = [str(row[1]) for row in matrix]
    disorder_list = [str(row[2]) for row in matrix]

f = open('new_sample.txt', 'a')

for i in range(len(header_list)):
    header = header_list[i]
    seq = seq_list[i]
    disorder = disorder_list[i]

    # count sequence length and total residue of missing coordinates
    sequence_length = len(seq)                            

    # get total number of missing coordinates
    num_missing = disorder.count('X')             

    # get the range of these missing coordinates
    first_X_pos = disorder.find('X')
    last_X_pos = disorder.rfind('X')
    range_missing = '-'.join([str(first_X_pos), str(last_X_pos)])

    reformat_seq=" ".join([header, str(num_missing), range_missing, str(sequence_length), seq, '\n'])  
    f.write(reformat_seq)

f.close()

更多提示:

不要忘记 python 的字符串函数。他们会自动解决你的很多问题。 documentation 很好。

如果您在问题中仅搜索如何执行第 2 部分或仅第 3 部分,您会在其他地方找到结果。

【讨论】:

  • 非常感谢!非常感谢您的帮助!
  • 再次感谢您。但我还有一个问题。您的代码只需缺少一个坐标段即可完美运行。所以在我上面提供的例子中。只有一个缺失的坐标段,位于最后两个位置。但是,如果有多个细分市场怎么办?如:“--------XXXXX-----XX-----X”
  • 计数应该还可以。在这种情况下,您希望如何格式化范围?关于获取此处出现 x 的所有索引的一些建议:stackoverflow.com/questions/13009675/…
  • 再次感谢!所以在你的代码中,这个“-----XX”的范围是5-6(因为它以0开头)。但是使用您的代码,“-XX--XX”的范围将是 1-6。但在这种情况下,我希望范围显示为 1-2、5-6。很抱歉再次打扰您!
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 2023-02-16
  • 2017-01-09
  • 2020-08-27
  • 2021-12-19
  • 2014-04-23
  • 2021-04-18
  • 2018-11-25
相关资源
最近更新 更多