将“名称”行之间的行读入字典Python

时间:2014-08-11 16:21:16

标签: python file dictionary

我有一个文件,其格式为一行,其后是一个未定义的数据行,然后是下一个名称,后跟下一个数据行。这个重复约300个名字。

我正在尝试将名称和数据保存到字典中,因为我希望以后可以操作数据。

我无法找到如何使用文本中上面列出的蛋白质名称的键将文件行分隔到字典中的示例。

我已经能够使用蛋白质名称的键创建一个空字典,但无法弄清楚或在线查找如何在字典中的每个正则表达式之间存储这些行。

每个名称行都以>

开头

以下是一个例子。

>Position   Peptide Score   Cutoff    
>AAR88322    
1   *********M|DAMK 0.253   0    
2   ********MD|AMKR 0.601   0
3   *******MDA|MKRG 0.353   0
4   ******MDAM|KRGL 0.204   0
5   *****MDAMK|RGLC 0.326   0
6   ****MDAMKR|GLCC 0.125   0
>AAR88321
1   *********M|DAMK 0.253   0
2   ********MD|AMKR 0.601   0
3   *******MDA|MKRG 0.353   0
4   ******MDAM|KRGL 0.204   0
5   *****MDAMK|RGLC 0.326   0

我已经能够使用此代码

创建空字典
if len(parts) < 2:
    prot_number = parts[0]
    dict[prot_number[1:]]= []

非常感谢任何有关如何执行此操作的帮助或建议。

1 个答案:

答案 0 :(得分:0)

这是一个简单的算法:

  1. 打开文件并对其进行迭代
  2. 搜索您的姓名行
  3. 如果我们找到名称行,请将其存储为新的词典键
  4. 如果不是,请将当前行存储为与遇到的最新名称对应的列表的一部分
  5. 顺便说一句,我忽略了你在你的例子中创建字典的方式,因为无论你想做什么对我来说都没有意义。

    示例:

    name_dict = {} # create empty dictionary
    
    with open (file_name, 'r') as fi: # open file
    
        for line in fi:               # iterate over the lines
    
            if line.startswith('>'):  # check for name line marker
                current_name = line.lstrip('>') # store name without angle bracket
                name_dict[current_name] = [] # create dictionary entry with empty list
    
            else:
                name_dict[current_name].append(line) # not a name line, add to current name's list of lines
    

    这将生成一个字典,其键是名称,每个名称的值是在其部分中找到的行的列表。由您决定如何处理数据,但是您可以在字典中存储非名称行以进行大量预处理,以便将来处理更简单。例如,您可以在存储线之前拆分线并剥去所有这些星号。