1

首先我要说我是一个 Python 新手!我正在为我的班级做作业,我们要靠自己做一些事情,我们要做一些没有教过的事情。那说:

我正在尝试将多行合并为一行。我需要这个:

>taxon1
ACCGTGGATC
CCTATTGATT
GGATATTATC

看起来像这样:taxon1 ACCGTGGATCCCTATTGATTGGATATTATC

我正在编写一个 python 脚本并从以下开始:

#!/usr/bin/python

import sys

if len(sys.argv) < 2:
    print "usage: finalmyscript.py infile.txt"
    sys.exit(1)

fname = sys.argv[1]

handle = open(fname, "r")

for line in handle:
    handle.close()
4

4 回答 4

0

好的,我现在有这个:

#!/usr/bin/python

import sys

if len(sys.argv) < 2:
print "usage: finalmyscript.py infile.txt"
sys.exit(1)

fname = sys.argv[1]                                                
handle = open(fname, "r")
list = handle.readlines()

for line in list:
parts = line.rstrip().split('\n')
print "".join(parts)                                           

它摆脱了换行符,但它仍然不会把所有东西都放在一行上。

于 2013-04-18T15:46:11.023 回答
0

试试这个代码:

    result=""
    for line in fname.readlines():
        if line[0]!=">": #does not import the first line with name of sequence
            result+=line.strip()
    fname.close()

    print result
于 2014-07-30T20:21:12.037 回答
0

我认为这会做你想要的:

#!/usr/bin/python

import os
import sys

if len(sys.argv) < 2:
    print "usage: %s <input file>" % os.path.split(sys.argv[0])[1]
    sys.exit(1)

with open(sys.argv[1]) as input_file:
    print(''.join([input_file.next().rstrip()[1:]+' '] +
                  [line.rstrip() for line in input_file]))
于 2013-04-17T01:59:50.143 回答
0

对于此示例,您可能只处理一个序列,因此此解决方案将适用于您正在寻找的内容:

#!/usr/bin/python

import sys

if len(sys.argv) < 2:
    print "usage: finalmyscript.py infile.txt"
    sys.exit(1)

fname = sys.argv[1]
handle = open( fname )

for line in handle:
  # Only the lines that are identifier lines(Aka, start with >)
  if line[0] == '>':
    # We could use print, but sys.stdout.write is just as easy to
    #  write to the terminal without a newline at the end
    sys.stdout.write( line.replace( '\n', ' ' ) )
  else:
    sys.stdout.write( line.replace( '\n', '' ) )

handle.close()

我留给你弄清楚如何修改上面的代码来处理单个文件中的多个序列。

如果您稍后要进行更多的生物信息学处理,您应该查看Biopython项目,这将使事情变得更容易。

这是一个使用 Biopython 的 SeqIO 模块很容易解决上述问题的示例

#!/usr/bin/python

from Bio import SeqIO
import sys

if len(sys.argv) < 2:
    print "usage: finalmyscript.py infile.txt"
    sys.exit(1)

fname = sys.argv[1]

for seq in SeqIO.parse( fname, 'fasta' ):
    print ">" + seq.id + " " + str(seq.seq)
于 2013-04-17T01:02:18.637 回答