python错误地将列表写入文件

python错误地将列表写入文件,python,text-processing,bioinformatics,Python,Text Processing,Bioinformatics,我在将列表写入文件时遇到问题。我正在注释某些文件以将其更改为特定格式,因此我读取序列对齐文件,将其存储在列表中,进行必要的格式化,然后将其写入新文件。问题在于,虽然我的包含序列比对的列表结构正确,但将它们写入新文件时产生的输出不正确(它不复制我的列表结构)。我只包括我的输出的一部分以及它应该是什么样子,因为列表本身太长了,无法发布 写入文件的输出: > TRFE_CHICK From XALIGN MKLILCTVLSLGIAAVCFAAP (seq spans multiple l

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

写入文件的输出:

>
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

*

>
它多次出现这种格式错误。我曾尝试过对列表进行酸洗和解酸洗,但这会进一步使其格式错误

生成列表并写入文件的代码:

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代码的>总是在新行上。这是我的列表的构建方式,但不是写入文件的方式。有人知道为什么会出现格式错误吗? 很抱歉我的文字太长了,我尽量把它写得简短些,以便把我的问题说清楚 我正在运行Python 2.6.5

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”的单个项目拆分为“…”和“*”两个项目实际上会从原来的换行符中删除一个换行符

您有一个行列表(每个行都有换行符),因此您还需要为这两行包含\n:

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

请记住,条带(或切片,我将其更改为)将删除换行符,因此将列表中值为“…*\n”的单个项目拆分为“…”和“*”两个项目实际上会从原来的内容中删除换行符。

您能提供示例输入吗?我想您可以用更少的代码实现这个结果。输入是一个包含多序列对齐的ASCII文件。输入是这样的:>TRFE\u HUMAN。。。一个很长的序列,后跟*在新行>TRFE_鼠标。。。另一个长序列后跟*。代码很长,因为我需要关注很多格式细节,例如将>和TRFE_鼠标拆分为两行,并将*置于换行符上。您可以提供示例输入吗?我想您可以用更少的代码实现这个结果。输入是一个包含多序列对齐的ASCII文件。输入是这样的:>TRFE\u HUMAN。。。一个很长的序列,后跟*在新行>TRFE_鼠标。。。另一个长序列后跟*。代码很长,因为我需要关注很多格式细节,比如将>和TRFE_鼠标分成两行,并将*放在换行符上谢谢!我没有意识到我的代码是从列表中删除一个换行符,而不是插入一个换行符并附加*我可以问其他问题吗?在我试图写入文件的输出中,有包含数字的字符串,例如“48”、“50”。在脚本中,您通常会编写str(48),\str(50),使用行连续字符将它们打印为48 50。在写入文件时,如何复制此信息?我使用了延续字符,但它不起作用。我基本上只需要文件中的行(例如)48 50。@Spyros:“+”在Python中用于连接字符串。是的,但是可以连接空白字符吗?类似str(48)+''str(50)的东西会产生错误。str(48),\str(50)语法在write()中使用时不会创建空格method@Spyros:您想要“48”+“50”吗?另外,请阅读%operator和str的format方法的字符串格式。谢谢!我没有意识到我的代码是从列表中删除一个换行符,而不是插入一个换行符并附加*我可以问其他问题吗?在我试图写入文件的输出中,有包含数字的字符串,例如“48”、“50”。在脚本中,您通常会编写str(48),\str(50),使用行连续字符将它们打印为48 50。在写入文件时,如何复制此信息?我使用了延续字符,但它不起作用。我基本上只需要文件中的行(例如)48 50。@Spyros:“+”在Python中用于连接字符串。是的,但是可以连接空白字符吗?类似str(48)+''str(50)的东西会产生错误。str(48),\str(50)语法在write()中使用时不会创建空格method@Spyros:您想要“48”+“50”吗?还可以阅读%operator和str的format方法的字符串格式。