2011-05-21 33 views
0

我遇到了将列表写入文件的问题。我注释某些文件,将它们转换为某种格式,因此我读取序列对齐文件,将它们存储在列表中,进行必要的格式化,然后将它们写入新文件。问题是,当我的包含序列比对的列表结构正确时,将它们写入新文件时产生的输出不正确(它不会复制我的列表结构)。我只包括我的输出的一部分以及它应该是什么样子,因为列表本身太长而不能发布。python将一个列表写入文件不正确

输出写入文件:

> 
TRFE_CHICK 

From XALIGN 

MKLILCTVLSLGIAAVCFAAP (seq spans multiple lines) ... 

ADYIKAVSNLRKCS--TSRLLEAC*> (end of sequence, * should be on a newline, followed by > on a newline as well) 

输出应该被写为:

> 

TRFE_CHICK 

From XALIGN 

MKLILCTVLSLGIAAVCFAAP (seq spans many lines) ... 

ADYIKAVSNLRKCS--TSRLLEAC 

* 

> 

它确实在这个misformatting多次。我尝试过酸洗和取消清单,但是这会进一步造成错误。

我的用于产生的列表,并写入文件的代码:

new = [] 
for line in alignment1: 
    if line.endswith('*\n'): 
     new.append(line.strip('*\n')) 
     new.append('*') 
    else: 
     new.append(line) 

new1 = [] 
for line in new: 
    if line.startswith('>'): 
     twolines = line[0] + '\n' + line[1:] 
     new1.append(twolines) 
     continue 
    else: 
     new1.append(line) 

for line in new1: 
    alignfile_annot.write(line) 

基本上,以便它的内容对准文件,插入序列的末端和*字符之间的线我已编码它和也使得ID后跟ID码总是在新的行上。这是我的列表建立的方式,但不是写入文件的方式。任何人都知道为什么错误格式? 道歉的长文,我试图保持尽可能短,以使我的问题明确 我运行的Python 2.6.5

+2

你能提供样本输入吗?我想你可以用更少的代码来实现这个结果。 – garnertb 2011-05-21 13:07:44

+0

输入是一个包含多个序列比对的ASCII文件。输入如下所示:> TRFE_HUMAN ...一个非常长的序列,然后在一个新行上跟随*> TRFE_MOUSE ...另一个长序列,然后是*。代码很长,因为我需要关注很多格式细节,例如将两行分割>和TRFE_MOUSE,并将*放在换行符 – Spyros 2011-05-21 13:19:30

回答

3
new.append(line.strip('*\n')) 
new.append('*') 

你行的列表(新行终止每)所以你需要包括\ n作为两行,太:

new.append(line[:-2] + "\n") # slice as you just checked line.endswith("*\n") 
new.append("*\n") 

记得带(或片,因为我已经改变了它)将删除换行符,所以分裂在列表中的单个项目将“... * \ n”的值代入“...”和“*”两项中,实际上会从您所拥有的版本中删除换行符riginally。

+0

谢谢!我没有意识到我的代码是从列表中删除一个换行符,而不是插入一个换行符并追加* – Spyros 2011-05-21 13:59:26

+0

我可以问一些其他的问题,我试图写入文件的输出包含数字的字符串,例如'48',' 50' 。在脚本中,您通常会使用行连续字符将str(48),\ str(50)写入为48 50.如何在写入文件时重现此操作?我使用延续字符,但它不起作用。我基本上只需要该文件有行(例如)48 50。 – Spyros 2011-05-21 14:23:42

+0

@Spyros:在Python中使用“+”来连接字符串。 – 2011-05-21 14:26:28

相关问题