我试图弄清楚如何根据任何列中的冗余删除CSV文件中的行。
1 0.002 3
2 0.001 2
5 0.100 1
5 0.023 4
6 0.065 10
15 0.032 10
8 0.450 6
输出文件如下所示
1 0.002 3
2 0.001 2
5 0.100 1
15 0.032 10
8 0.450 6
正如您在此处所见,我想删除任何列重复的行。此外,我的数据已经排序,所以我认为仅仅比较两个连续的行就足够了。
答案 0 :(得分:1)
简单示例 - 我检查以前的所有行以确定。
使用csv
模块读取和写入CSV文件
csv = [
[1, 0.002, 3],
[2, 0.001, 2],
[5, 0.100, 1],
[5, 0.023, 4],
[6, 0.065, 10],
[15, 0.032, 10],
[8, 0.450, 6]
]
new_csv = csv[:1]
#print new_csv
for x in csv[1:]:
#print 'x:', x
repeated = False
for y in new_csv:
#print 'y:', y
for a,b in zip(x,y):
if a == b:
repeated = True
break
if repeated:
break
if not repeated:
new_csv.append(x)
for x in new_csv:
print x
结果:
[1, 0.002, 3]
[2, 0.001, 2]
[5, 0.1, 1]
[6, 0.065, 10]
[8, 0.45, 6]
顺便说一句:我删除了[15, 0.032, 10]
,因为[6, 0.065, 10]
是列表中的第一个。
编辑相同但没有repeated
但for/else
和any()
csv = [
[1, 0.002, 3],
[2, 0.001, 2],
[5, 0.100, 1],
[5, 0.023, 4],
[6, 0.065, 10],
[15, 0.032, 10],
[8, 0.450, 6]
]
new_csv = csv[:1]
for x in csv[1:]:
for y in new_csv:
if any(a == b for a,b in zip(x,y)):
break
else:
new_csv.append(x)
for x in new_csv:
print x
答案 1 :(得分:0)
试试自己。这是做同样的逻辑:
list1
。list1
并再次根据空格拆分list1
中的每个元素,从而创建另一个名为list2
的列表list2[i][j]
和list2[i+1][j]
列表