我有这样一个输入文件
id_per start end s_len
con1 P1 95.27 1 148 148
con2 P2 89.86 4 148 148
con3 P5 76.67 1 512 516每一次我都有P(蛋白质)。我想找到全长的蛋白质,如果我知道每一个P的起始点、末端位置和长度,这是可能的。下面的脚本就是这样做的。然而,现在我的问题是,我想找到长度,但考虑到也+ 10单位,从开始和结束的网站。
import re
output=open('res.txt','w')
output2=open('res2.txt','w')
f=open('file.txt','r')
lines=f.readlines()
for line in lines:
new_list=re.split(r'\t+',line.strip())
id_per=float(new_list[2])
s_start=int(new_list[3])
s_end=int(new_list[4])
s_len=int(new_list[5])
if s_start == 1 and s_end == s_len and id_per >= 30:
new_list.append(s_start)
new_list.append(s_end)
new_list.append(s_len)
new_list.append(id_per)
output.writelines(line)
else:
output2.write(line)
f.close()
output.close()
output2.close()发布于 2014-04-01 09:20:38
如果我正确地理解了您,您的条件可以重写为:|distance_from_start_to_end - stated_length| < 10。
with open('example.txt', 'r') as infile, \
open('output.txt', 'w') as outfile, \
open('errors.txt', 'w') as errfile:
for line in in file:
id_per, s_start, s_end, s_len = (line.split()[i] for i in [2, 3, 4, 5])
start_to_end = (int(s_end) - int(s_start)) + 1
if abs(int(s_len) - start_to_end) < 10:
outfile.write(line)
else:
errfile.write(line)对于原始代码,在这个片段中还有其他改进:
with避免显式关闭文件句柄。re模块,split可以接受一个制表器作为拆分字符。,自动解构从行拆分的标记。_来忽略它们new_list变量,因为它似乎没有被使用。也许我误解了你的小片段?https://stackoverflow.com/questions/22781227
复制相似问题