文件中的Python字符数

时间:2014-11-18 15:35:21

标签: python for-loop dictionary

我获得了一个文本文件,该文件提供了某种细菌内各种蛋白质的编码序列。该信息以简短描述的形式以及由大写字母表示的各种氨基酸编码序列。我被要求计算以下形式的各种单字母氨基酸代码:

A: 1567
C: 8776
D: 6643
E: 3345
etc..

到目前为止我所拥有的:
我知道它涉及使用Dicts和forloops,所以我写了:

#!/usr/bin/python
ecoli = open("/file_pathway.txt").read()
counts = dict()
for line in ecoli:
    words = line.split()
    for word in words:
        if word not in counts:
            counts[word] = 1
        else:
            counts[word] += 1

for key in counts:
    print key, counts[key]

我不是如何编辑if语句只包括我正在搜​​索的特定大写字母(即A,C,D,E,L ...)

5 个答案:

答案 0 :(得分:1)

添加另一个if,这样您只需为counts增加已接受的字母。

for word in words:
    if word in ["A", "C", "D", "E", "L"]:
        if word not in counts:
            counts[word] = 1
        else:
            counts[word] += 1

答案 1 :(得分:0)

我在这里建议的几件事。您可以使用collections创建一个可以开始添加到

的字典
from collections import defaultdict
counts = defaultdict(int)

然后你可以使用

counts[word] += 1 #don't need to check if word already exists

如果您知道要查找的单词,请将其保留在列表中

search_words = ['A', 'C' ...]

然后你可以检查你关心的词是否在那里

if word in search_words:
     counts[word] += 1

答案 2 :(得分:0)

我想通过在查找时给出默认值0来省略对每个单词的附加测试,因为它在dict键中:

ecoli = open("/file_pathway.txt").read()
counts = dict()
for line in ecoli:
    for word in [w for w in line.split() if w in 'ACDEL']:
        counts[word] = counts.get(word,0) + 1

答案 3 :(得分:0)

在[1]中:!cat test.dat AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

在[2]中:inf = open('test.dat','r')#创建python文件对象inf

在[3]中:s = inf.readline()#read整个文件数据到字符串变量s

在[4]中:[s.count(i)for i in'ACDE'] #apply list comprehension获取字母数量
出[4]:[156,29,20,37]

在[5]中:inf.close()

在[6]中:

我假设您的氨基酸序列在文件data.dat中写为字符串(无引号),除了氨基酸序列字符串外,文件中没有任何内容。结果:'A'计数为156,'C'计数为29等。注意:test.dat显示字母的排序顺序这一事实纯属巧合且无关紧要。序列可能有'AEDC ...',生成的结果也是一样的。

答案 4 :(得分:0)

您可以使用Counter

from collections import Counter

lets=Counter()
with open(ur_file, 'r') as f:
    for line in f:
        for c in line.strip():
            lets[c]+=1