2013-04-17 47 views
1

我會先說我非常喜歡Python NEWBIE!我正在爲班上的任務工作,而我們正在爲自己所處的部分工作,並且希望做一些沒有教授的東西。這就是說:結合DNA的線條

我想將多行組合成一行。我需要這樣的:

>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

相反reinvnenting有關命令行參數的輪子,你應該使用argparse模塊。 – k0pernikus

+0

或'tr'\ n',''文件'。 – squiguy

+0

使用tr會將所有換行符替換爲空字符串,這將不會留下標識符行和序列之間的空格 – Necrolyte2

回答

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) 
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])) 
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)           

它可以擺脫換行符,但它仍然不會將所有內容放在一行上。

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