我首先要说的是,我非常喜欢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()
答案 0 :(得分: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)
答案 1 :(得分: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]))
答案 2 :(得分: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)
哪个摆脱了换行符,但它仍然不会将所有内容都放在一行上。
答案 3 :(得分: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