在python中计算频率时忽略一行

在python中计算频率时忽略一行,python,Python,我在文本文件中有以下格式 -FRFR YOUAREMYFRIEND -JKJK YOUARENOTMYFRIEND -SSFF LETUSBEFRIENDS 我想计算行中每个字母的频率,它不是以“-”开头的,而且它是一个巨大的文件,所以我不能只是复制 还有什么我能做的吗 for line in str if line starts with '-' then dont count that line else: do count the line total_len

我在文本文件中有以下格式

-FRFR
YOUAREMYFRIEND
-JKJK
YOUARENOTMYFRIEND
-SSFF
LETUSBEFRIENDS
我想计算行中每个字母的频率,它不是以“-”开头的,而且它是一个巨大的文件,所以我不能只是复制

还有什么我能做的吗

for line in str

if line starts with '-'
      then dont count that line
else:
      do count the line

total_length = 0
nucleotide = {}

seq_file = open("file.txt", "r")
for raw_line in seq_file:
    line = raw_line.rstrip("\r\n")
    length = len(line)
    for nuc in line:
        if nucleotide.has_key(nuc): 
            nucleotide[nuc] += 1
        else:
            nucleotide[nuc] = 1
    total_length += length

seq_file.close()
您可以使用:

印刷品:

Counter({'E': 7, 'R': 5, 'N': 4, 'Y': 4, 'D': 3, 'F': 3, 'I': 3, 'O': 3, 'U': 3, 'A': 2, '\n': 2, 'M': 2, 'S': 2, 'T': 2, 'B': 1, 'L': 1})
[('E', 7), ('R', 5), ('N', 4)]
您还可以打印出n个最常见的项目,例如:

print results.most_common(3)
if (line[0] != '-'): count +=1
印刷品:

Counter({'E': 7, 'R': 5, 'N': 4, 'Y': 4, 'D': 3, 'F': 3, 'I': 3, 'O': 3, 'U': 3, 'A': 2, '\n': 2, 'M': 2, 'S': 2, 'T': 2, 'B': 1, 'L': 1})
[('E', 7), ('R', 5), ('N', 4)]

我认为测试行的第一个字符应该有用。例如:

print results.most_common(3)
if (line[0] != '-'): count +=1

我想如果你否定了
startswith
布尔值,去掉
continue
,那么你的逻辑会更清晰一些,所以
如果不是line.startswith('-'):results.update(line)
,但这只是我的问题opinion@wnnmaw是的,关于什么更具可读性还有争议,谢谢。@wnnmaw虽然我同意这种情况,一般来说,我喜欢测试我的失败状态并继续,然后在循环块中运行我的代码,而不是在循环块中运行
if
块。哇,那真是太快了!非常感谢。是什么阻止您在Python中运行它?你试过了吗?你有没有看到任何具体的错误?