【问题标题】:how to remove same characters and keep unique in text file如何删除相同的字符并在文本文件中保持唯一
【发布时间】:2016-04-04 14:47:29
【问题描述】:

此代码删除所有双打

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

【问题讨论】:

标签: python python-3.x


【解决方案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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多