我的文件非常大,格式为
*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[]]
然而,结果并不理想,因为它只删除连续出现的事件并且代码变得太长。任何建议?
答案 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)