-2

*编辑,我已经重申了这个问题,希望它不像以前那么愚蠢!

我想创建一个将入藏号与物种名称匹配的字典。我格式化了我的文件,使它看起来像这样:

'AM158981': 布鲁氏菌, pinnipedialis, 布鲁氏菌科,
'AM158980': 布鲁氏菌, 猪, 布鲁氏菌科,
'AM158982': 布鲁氏菌, 鲸鱼, 布鲁氏菌科,
'AM158979': 布鲁氏菌, 流产, 布鲁氏菌科,

ETC......

我想打开这个文件,让它变成一本字典。我写这篇文章是为了尝试打开它,并将入藏号作为字典的键:

#! /usr/bin/env python

reader = open("acsn.txt")

result = {}
for row in reader:
    key = row[0]
    if key in result:
        pass
    result[key] = row[1:]
print result

“key = row[0]”行将入藏号的第一个字母作为密钥。我意识到使用 [0] 只是返回字符串的第一个字符,但我不确定如何使第一个“单词”(例如 AM158981)成为关键。

谢谢!

4

2 回答 2

2

Python代码:

data = """>D50541 Abiotrophia defectiva Aerococcacea
>AB303221 Acanthopleuribacter pedis Acanthopleuribacteraceae
>AJ812213 Acaricomes phytoseiuli Micrococcaceae"""

dict(row[1:].split(" ", 1) for row in data.split("\n"))

输出:

{'AB303221': 'Acanthopleuribacter pedis Acanthopleuribacteraceae',
 'AJ812213': 'Acaricomes phytoseiuli Micrococcaceae',
 'D50541': 'Abiotrophia defectiva Aerococcacea'}

编辑

如果从文件中读取数据input.txt,请执行以下操作:

dict(row[1:].split(" ", 1) for row in open("input.txt").read().split("\n") if row)
于 2013-05-23T15:04:54.780 回答
0

这里有一些帮助。

首先,最好使用该with构造在 Python 中打开文件,如下所示:

with open('/tmp/src.txt','r') as src:
    for line in src:
        print line.strip()

那应该像这样完整地打印您的文件:

\>D50541 Abiotrophia defectiva   Aerococcacea
\>AB303221 Acanthopleuribacter pedis     Acanthopleuribacteraceae
\>AJ812213 Acaricomes phytoseiuli        Micrococcaceae

现在您只需要解析每一行数据。只是根据个人喜好,我会使用正则表达式,但有很多方法可以做到这一点。 这是一个适用于您的数据行的示例正则表达式

这是 Python 中的相同示例正则表达式:

import re

data={}        
with open('/tmp/src.txt','r') as src:
    for line in src:
        m=re.search(r'>([^\s]*)\s(.*)$',line)       
        if m:
            data[m.group(1)]=m.group(2)  

print data 

印刷:

{'AB303221': 'Acanthopleuribacter pedis     Acanthopleuribacteraceae', 'AJ812213': 'Acaricomes phytoseiuli        Micrococcaceae', 'D50541': 'Abiotrophia defectiva   Aerococcacea'}
于 2013-05-23T15:30:53.697 回答