python3 特定行判断读取合并

我有一个要处理的 txt 文件 test.txt

内容是:

>列表名字
xxxxxxxxxxxxxxxx
xxxxxxxxxxxx
xxxx
>列表名字2
  xxxxxxxxxxxx
xxxx

要做的处理是对 每个列表名字 下的 所有行 进行 某字符出现次数 的统计

我使用的读取方法是:

def ratio(string):
    """读取字符串计算比例的函数"""
    # ...

with open('test.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if line.startswith('>'):  # 判断开头是否为>
            name = line[1:]       # 去掉>
        else:
            r = ratio(line)
            list1.append(name)
            list1.append(r)
            count.append(list1)   # count 这个列表包含了子集
            
# 跳出for后, 对count这个列表依照ratio进行排序

print(count[-1])                  # 输出count[-1]

我在 sampledata 时没有考虑到 xxxxxxxxxxxxx 有很多行,现在不懂的做法是如何在这个基础上将 xxx 行全部拼起来而不改变原有的思路(我只能想到这个了),或提供别的更快捷的思路。

请各位大大指教,谢谢。

編者: 我盡量依照你的意思整理了一下資訊, 但很多地方還是很模糊, 也許你可以補充一下...
阅读 2.3k
2 个回答

看描述,似乎含有「列表名字」的行总是以>开头的?
那么两个>之间的内容就是列表名字 + 行内容了吧。

代码思路如下,没有实际跑过:

current_content = ''
current_name = ''

for line in f:
    line = line.strip()
    if line.startswith('>'):  # 判断开头是否为 >
        name = line[1:]       # 去掉 >
        if current_content:
            # 处理当前的内容
            r = ratio(current_content)
            count.append((current_name, r))  # 将 tuple 插入 list, 此时 current_name 尚未更新
        current_name = name  # 更新 current_name
        current_content = '' # 重置 current_content, 准备记录新的内容
    else:
        current_content += line

统计ATGC含量?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题