【问题标题】:Making a dictionary from files in which keys are filenames and values are strings with specific character从文件中创建字典,其中键是文件名,值是具有特定字符的字符串
【发布时间】:2022-12-11 13:44:33
【问题描述】:

所以我的问题是——我有 FASTA 格式的蛋白质组,看起来像这样:

示例文件的名称:

GCA_003547095.1_protein.faa 

内容:

>CAG77607.1
ABCDEF
>CAG72141.1
CSSDAS

而且我还有只包含蛋白质名称的文件,即:

文件名:

PF00001

内容:

CAG77607.1
CAG72141.1

我的任务是使用蛋白质列表迭代蛋白质组,以找出每个蛋白质组中有多少蛋白质。 PE告诉我应该是一个字典,以蛋白质组的文件名为键,以“>”后的序列名为值。

我的方法如下:

import pandas as pd
file_names = open("proteomes_list").readlines()

d = {x: pd.read_csv("/proteomes/" + "GCA_003547095.1_protein.faa").columns.tolist() for x in file_names}
print (d)

如您所见,我已经将蛋白质组文件名制作成列表(使用简单的 bash“ls”,这些只是蛋白质组的名称)然后创建以序列名称作为值的字典——不幸的是每个蛋白质组(包括测试的蛋白质组)只有一个值. 如果您能阐明我的情况,我将不胜感激。

我的目标是制作字典,其中键为 GCA_003547095.1_protein.faa,值为 CAG77607.1、CAG72141.1。

【问题讨论】:

    标签: python bioinformatics fasta


    【解决方案1】:

    这是您期望的输出吗?此函数应遍历您的文件并获取 fasta 文件头或文件中预期的蛋白质名称。这是一个可以创建 fasta 标头列表的快速函数。 您可以创建您提到的字典购买迭代文件名并更新父字典

    import os 
    def extract_proteomes(folder: str, filename: str) -> list[str]:
        with open(os.path.join(folder, filename), mode='r') as file:
            content: str = file.read().split('
    ')
        protein_names = [i[1:] for i in content if i.startswith('>')]
        if not protein_names:
            protein_names = [i for i in content if i]
        return protein_names
    
    folder = "/Users/user/Downloads/"
    files = ["GCA_003547095.1_protein.faa", "PF00001"]
    d = {}
    for i in files:
        d.update({i: extract_proteomes(folder=folder, filename=i)})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多