Python - 部分行在文件中不合适

Python - part of line out of place in file

我写了一个脚本来搜索我的管道序列中被删除的一些文件。这是脚本:

#!/usr/bin/python
# -*- coding: utf-8 -*-

q = open('eg-not-sec.bait').readlines()
tm = open('eg_tm0_res').readlines()
ph = open('eg_ph01_res').readlines()
secp = open('eg_secp_res').readlines()
tp = open('eg_tp_res').readlines()
ps = open('eg_ps_res').readlines()
gpi = open('eg_es_final_ids').readlines()
nf = open('eg_elim-test', 'a')


for line in q:

    if line not in tm:
        nf.writelines('%sTMHMM\t'%line)

    elif line not in ph:
        nf.writelines('%sPH\t'%line)

    elif line not in secp:
        nf.writelines('%sSECP\t'%line)

    elif line not in tp:
        nf.writelines('%sTP\t'%line)

    elif line not in ps:
        nf.writelines('%sPS\t'%line)

    elif line not in gpi:
        nf.writelines('%sGPI\t'%line)

nf.close()

如果没有细节,它会完美地工作:最后一行的序列 ID 在第一行,并且它被删除的标识单独在最后一行,像这样:

EgrG_000049700.1
PH  EgrG_000055800.1
PH  EgrG_000133800.1
PH  EgrG_000221600.1
PH  EgrG_000324200.1
PH  EgrG_000342900.1
PH  EgrG_000391800.1
PH  EgrG_000406000.1
PH  EgrG_000428150.1
TMHMM   EgrG_000430700.1
PH  EgrG_000477400.1
PH  EgrG_000498000.1
PH  EgrG_000502700.1
TMHMM   EgrG_000521200.1
PH  EgrG_000566700.1
PH  EgrG_000633500.1
PH  EgrG_000690700.1
PH  EgrG_000709300.1
PH  EgrG_000823900.1
PH  EgrG_000907100.1
PH  EgrG_000925400.1
PH  EgrG_000974700.1
PH  EgrG_001061400.1
PH  EgrG_001081300.1
PH  EgrG_001136900.1
PH  EgrG_001148800.1
PH  EgrG_002005100.1
PH  EgrG_002026400.1
PH  EgrG_002058200.1
PH  

手动解决很简单,只需复制最后一行的 'PH' 并将其粘贴到序列 ID 之前的第一行,但我想知道如何在我的代码中解决这个问题,我是不知道该怎么做。

readlines() 方法在返回列表的每一行末尾保留换行符。那么让我们以这行代码为例...

    nf.writelines('%sPH\t'%line)

这将输出您的一行,最后用换行符完成。然后它在下一行 上放置 "PH" 和一个制表符 。由于它不输出自己的换行符,因此您接下来写的任何内容都将出现在与 PH 相同的行上。

我想你想要这样的东西:

    nf.write("PH\t%s" % line)

让事情井井有条。另请注意使用 write(输出单个字符串)而不是 writelines(输出 字符串序列 ):您基本上是在告诉 Python 单独输出字符串中的每个字符,而不是一次全部输出。