如何使用python删除文件中一行的多个实例

时间:2016-11-23 16:33:59

标签: python match line

我的文件非常大,格式为

*Contact Pair, interaction=IntPropPrior1, small sliding, type=SURFACE TO SURFACE 
Part-1-1.SS11, Part-1-1.SS23
*Contact Pair, interaction=IntPropPrior1, small sliding, type=SURFACE TO SURFACE 
Part-1-1.SS7, Part-1-1.SS65 
*Contact Pair, interaction=IntPropPrior1, small sliding, type=SURFACE TO SURFACE 
Part-1-1.SS7, Part-1-1.SS65 
*Contact Pair, interaction=IntPropPrior1, small sliding, type=SURFACE TO SURFACE 
Part-1-1.SS11, Part-1-1.SS23 

可以看到字段

Part-1-1.SS11, Part-1-1.SS23

Part-1-1.SS7, Part-1-1.SS65

在这种情况下重复。 SS之后的数字可以改变。这条线有数千条参赛作品。在每个文件中,在SS之后可以有多个这样的行具有相同的数字,并且只能保留一个。不仅要删除额外的实例,还应该删除上面的标题行。

Part-1-1.SS23,Part-1-1.SS11 

应该被认为是相同的,只是切换字段。

我尝试的是

for line in infile:
 if line.startswith('Part-1-1.SS'):
  array[line]=line.split(',')
v= array[0]
u= array[1]           
v1,u1 = zip(*sorted(zip(v,u), reverse=True))
counter=len(u)  
for i in xrange(u)
 for j in xrange(v)
  if (u[j]==u[j+1] & v[j]==v[i+1]):
   del u[j]
   del v[]]

然而,结果并不理想,因为它只删除连续出现的事件并且代码变得太长。任何建议?

1 个答案:

答案 0 :(得分:0)

使用csv阅读器和一些过滤黑名单中的行的逻辑可以轻松完成。由frozenset s组成的黑名单可以让您避免在测试黑名单中的成员资格之前对行进行排序

import csv

blacklist = set()

with open('path/to/input') as fin, open('path/to/output', 'w') as fout:
    infile = csv.reader(fin)
    outfile.csv.writer(fout)
    for title, values in zip(infile, infile):
        vals = frozenset(int(i.rsplit('.',1)[0].lstrip("S")) for i in values)
        if vals in blacklist: continue
        blacklist.add(vals)
        outfile.writerow(title)
        outfile.writerow(values)