如何忽略缺少数据的行

时间:2014-04-30 15:39:03

标签: python

我有一个巨大的文件,标签分隔0-10行。我的问题是,如何忽略缺少空行[4]的整行?我的输入文件,

1 GRMZM2G052619_P03 10 56       a b c d e y        
2 GRMZM5G888620_P01 23 67 go:89 f g h k l m     
3 GRMZM5G886789_P02 45 89       o p r s t w

所以,我的最终输出应该是这样的,

2 GRMZM5G888620_P01 23 67 go:89 f g h k l m

import re
f=open('input.txt','r') 
r=open('output.txt','w')
lines=f.readlines() 
for line in lines:
   new_list=re.split(r'\t+',line)
   go_acc=new_list[4]
   if go_acc != '':
       r.writelines(line)
f.close()
r.close() 

如果go_acc!='':

,我认为此行有问题

2 个答案:

答案 0 :(得分:1)

如果没有11个字段,则跳过行(使用continue)。

for line in lines:
    new_list=re.split(r'\t+',line)
    if len(new_list) != 11: # <------
        continue            # <------
    go_acc=new_list[4]
    if go_acc != '':
        r.write(line)

答案 1 :(得分:1)

这里的问题是,由于您正在使用正则表达式\t+拆分行,因此生成的字符串列表将不包含任何空字符串 - 这些“空”字段将被简单地跳过。例如,第一行将被解析为["1", "GRMZM2G052619_P03", "10", "56", "a", "b", "c", "d", "e", "y"],因此索引4处的项目不是''而是"a"

我认为在这种情况下更好的方法是实际尝试匹配您正在寻找的东西。例如,如果索引4处的可选事项是go:XX,其中XX是某个数字,那么您可以执行以下操作:

import re

f=open('input.txt','r') 
r=open('output.txt','w')

for line in f.readlines():
    if re.search(r'go:\d+', line):
        r.write(line + "\n")

f.close()
r.close()