首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表中的每个项目添加到FASTA文件中特定行的末尾

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

Stack Overflow用户
提问于 2015-04-29 05:13:13
回答 3查看 533关注 0票数 4

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

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

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

例如:

File1:

“>此处不需要seq1

AATATTATA

数据数据

seq2这里不想要的东西

GTGTGTGTG

GTGTGTGTG

seq3更多的东西我不想要

ACACACACAC

ACACACACAC“

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

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

结果(修改后的file1):

“>序列1 things1

AATATTATA

数据数据

由于mylist1 = '‘,

seq2 #在此不添加任何内容

GTGTGTGTG

GTGTGTGTG

seq3 things3

ACACACACAC

ACACACACAC

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

所以再一次,我想让它解析这个FASTA文件,每次它到达一个头(有数千个)时,我想让它用我创建的单独列表中的下一项替换第一个单词之后的所有内容。

EN

回答 3

Stack Overflow用户

发布于 2015-04-29 11:57:06

您所拥有的将会工作,但是有一些不必要的行,所以我已经向下编辑以使用更少的行。另外,一个重要的注意事项是不要关闭您的文件句柄。这可能会导致错误,特别是在写入文件时,无论哪种方式,这都是不好的做法。代码:

代码语言:javascript
复制
#!/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()来将注释数据与序列I相关联,除非您确定文件每次的顺序都是相同的。

票数 1
EN

Stack Overflow用户

发布于 2015-12-13 04:22:52

python中有一个很棒的库,用于Fasta和其他DNA文件解析。这在生物信息学中是非常有用的。您还可以根据需要操作任何数据。下面是一个从the library website中摘录的简单示例

代码语言:javascript
复制
from Bio import SeqIO
for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):
    print(seq_record.id)
    print(repr(seq_record.seq))
    print(len(seq_record))

你应该在你的屏幕上看到类似这样的东西:

代码语言:javascript
复制
gi|2765658|emb|Z78533.1|CIZ78533
Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC', SingleLetterAlphabet())
740
...
gi|2765564|emb|Z78439.1|PBZ78439
Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC', SingleLetterAlphabet())
592
票数 1
EN

Stack Overflow用户

发布于 2015-04-29 08:55:21

*编辑*

我在任何人都能帮助我之前解决了这个问题。这是我的代码,有没有人能告诉我有什么不好的做法?有没有一种方法可以做到这一点而不把所有内容都写到一个新文件中?这似乎需要很长的时间/大量的内存。

代码语言:javascript
复制
#!/usr/bin/python
# Script takes unedited FASTA file, removed seq length and
# other header info, adds annotation after sequence name
# run as: $ python addanno.py testanno.out testseq.fasta out.txt

import sys

# gets list of annotations
def get_annos(infile):
    f = open(infile)
    list2 = []
    for line in f:
        columns = line.strip().split('\t')
        list2.append(columns[5])
    return list2

# replaces extra info on each header with correct annotation
def add_annos(infile1, infile2, outfile):
    mylist = get_annos(infile1) # contains list of annos
    f2 = open(infile2, 'r')
    output = open(out, 'w')
    for line in f2:
        if line.startswith('>'):
            l = line.partition(" ")
            list3 = list(l)
            del list3[1:]
            list3.append(' ')
            list3.append(mylist.pop(0))
            final = ''.join(list3)
            line = line.replace(line, final)
            output.write(line)
            output.write('\n')
       else:
            output.write(line)

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

add_annos(anno, seq, out)
get_annos(anno)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29930050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档