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 单独输出字符串中的每个字符,而不是一次全部输出。
我写了一个脚本来搜索我的管道序列中被删除的一些文件。这是脚本:
#!/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 单独输出字符串中的每个字符,而不是一次全部输出。