python - 将列表中的每个项目添加到 FASTA 文件中特定行的末尾

标签 python list header element fasta

我在下面的评论中解决了这个问题。

所以基本上我要做的是将字符串列表的每个元素添加到不同文件中特定行的末尾。

很难解释,但本质上我想解析一个 FASTA 文件,每次它到达标题时 (line.startswith('>')) 我希望它用列表中的元素替换该标题的一部分我'已经做了。

例如:

文件1:

">此处不需要seq1

阿塔塔塔

阿塔塔塔

>seq2 不需要的东西在这里

GTGTGTGTG

GTGTGTGTG

>seq3 更多我不想要的东西

ACACACACAC

ACACACACAC"

我希望它保留“>seq#”,但将后面的所有内容替换为下面列表中的下一项:

列表: mylist = "['things1', '', 'things3', 'things4', '' 'things6', 'things7']"

结果(修改后的文件 1):

">seq1 事物 1

阿塔塔塔

阿塔塔塔

>seq2 # 由于 mylist[1] = '' 在这里不添加任何内容

GTGTGTGTG

GTGTGTGTG

>seq3 things3

ACACACACAC

ACACACACAC

如您所见,我希望它甚至添加列表中的空白项。

再一次,我希望它解析这个 FASTA 文件,每次它到达一个标题(有数千个)时,我希望它用单独列表中的下一个项目替换第一个单词之后的所有内容制作。

最佳答案

您所拥有的将起作用,但有一些不必要的行,因此我进行了编辑以减少使用几行。另外,重要的一点是您不要关闭文件句柄。这可能会导致错误,特别是在写入文件时,无论哪种方式都是不好的做法。代码:

#!/usr/bin/python

import sys

# gets list of annotations
def get_annos(infile):
    with open(infile, 'r') as fh:  # makes sure the file is closed properly
        annos = []
        for line in fh:
            annos.append( line.split('\t')[5] ) # added tab as separator

    return annos

# replaces extra info on each header with correct annotation
def add_annos(infile1, infile2, outfile):
    annos = get_annos(infile1) # contains list of annos
    with open(infile2, 'r') as f2, open(outfile, 'w') as output:
        for line in f2:
            if line.startswith('>'):
                line_split = list(line.split()[0]) # split line on whitespace and store first element in list
                line_split.append(annos.pop(0)) # append data of interest to current id line
                output.write( ' '.join(line_split) + '\n' ) # join and write to file with a newline character
            else:
                output.write(line)

anno = sys.argv[1]
seq = sys.argv[2]
out = sys.argv[3]

add_annos(anno, seq, out)
get_annos(anno)

这并不完美,但它清理了一些东西。我可能会避免使用 pop() 将注释数据与序列 ID 相关联,除非您确定文件每次的顺序都相同。

关于python - 将列表中的每个项目添加到 FASTA 文件中特定行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930050/

相关文章:

python - 当迭代超过 10,000 次时,Tensorflow 训练变得越来越慢。为什么?

java - JSTL 删除附加符号

list - Delphi Spring4D IList内存溢出

linux - 64 位机器上的原始套接字编译问题

python - 如何使用 Python Pandas 将 CSV 文件写入 XLSX?

Python 模块导入 - 为什么只有在显式导入时组件才可用?

python - Python 中的数组索引

php - Nginx/PHP : Nginx is not returning a 304 response when sending Etag header

php - 如何在cakephp中写内容类型?

python - 将 C++ 行转换为 Python 3