此代码删除所有双打
lines = open('D:\path\file.txt', 'r').readlines()
lines_set = set(lines)
out = open('D:\path\file.txt', 'w')
for line in lines_set:
out.write(line)
从:
3
3
2
7
7
7
我只得到:
2
但如何删除相同的字符并保持唯一,这个结果:
3
2
7
答案 0 :(得分:1)
您的代码正常工作,对于没有额外空格的输入文件,以及终止文件中每一行的换行符。如果您只在输出中看到一行,则出现其他问题;也许你在Python脚本退出之前查看输出文件并且输出文件仍然打开以进行写入(这意味着其余行仍然在用于提高写入速度的OS内存缓冲区中)。
但是,为了让您的代码在所有情况下都能正常工作,在检查文件内容时,您需要忽略换行符和其他空格:
with open('D:\path\file.txt', 'r') as lines:
lines_set = {line.strip() for line in lines}
with open('D:\path\file.txt', 'w') as out:
for line in lines_set:
out.write(line + '\n')
上面的代码在向行添加行之前删除了空格,并在写入时添加了新的换行符。我还使用这些文件作为上下文管理器(通过with
语句),确保在读取或写入完成后它们正确关闭。
不是将整个输入文件读入内存,而是可以在找到行时写出行,并且只跟踪到目前为止看到的值:
with open('D:\path\file.txt', 'r') as lines:
seen = set()
with open('D:\path\file.txt', 'w') as out:
for line in lines:
line = line.strip()
if line not in seen:
out.write(line + '\n')
seen.add(line)
这具有额外的优点,即保留了唯一线的顺序。这与唯一行的数量成比例;除非输入文件中的唯一行数很大(导致输出文件非常大),否则处理大型输入文件时应该没有问题。