簡體   English   中英

如何使用python刪除文件中一行的多個實例

[英]how to delete multiple instances of a line in a file using python

我有非常大的文件與表格中的數據

*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[]]

但是,結果並不理想,因為它只刪除連續出現並且代碼變得太長。 任何建議?

這可以通過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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM