【问题标题】: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)})