您可以逐行遍历文件,并使用 a 跟踪看到set的值,如果它已经在set.
粗略的例子:
seen = set()
with open('test.csv') as input, open('test_out.csv', 'w') as output:
for line in input:
value = float(line)
while value in seen:
value -= 0.000001
seen.add(value)
output.write(str(value) + '\n')
这是有效的,因为 aset提供 O(1) 查找
如果您要将值写回同一个文件,则可以使用 fileinput 模块:
import fileinput
seen = set()
for line in fileinput.FileInput('test.csv', inplace=True):
value = float(line)
while value in seen:
value -= 0.000001
seen.add(value)
print str(value).strip()
编辑
为了解决 eumiro 关于浮点问题的评论:
您可以使用decimal模块Decimal或只是将值与/除相乘/除以使用1000000,int而不是使用float. 正如我所写,这只是一个粗略的例子:-)