[英]how can i print multiple instances from a file in a single line using 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.