如何删除相同的字符并在文本文件

时间:2016-04-04 06:38:41

标签: python python-3.x

此代码删除所有双打

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

1 个答案:

答案 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)

这具有额外的优点,即保留了唯一线的顺序。这与唯一行的数量成比例;除非输入文件中的唯一行数很大(导致输出文件非常大),否则处理大型输入文件时应该没有问题。