【问题标题】:Python remove duplicatesPython删除重复项
【发布时间】:2017-02-14 15:27:25
【问题描述】:

我写这个是为了从文件的行中删除重复的行,并将没有重复的行写入另一个文件。我正在解决错误: “TypeError:需要一个字符缓冲区对象” 我该怎么做才能避免这种情况?

f2 = open('withoutduplicates.txt', 'w')
f1 = open('elements.txt')
lines = f1.readlines()
for i, line in enumerate(lines):
    L=[line]
    newlist=[ii for n,ii in enumerate(L) if ii not in L[:n]]
    f2.write(newlist)

f1.close()
f2.close()

文件f1 (elements.txt) 看起来像:

88208   89630   88744   89078   89659   89886   89886   89886   89886   354847  354844  356602  358593  89886   89886   89886   89886   358594  354848  356605  358675
88209   89633   89866   89646   90021   88661   88661   88661   88661   358601  358639  358641  358603  88661   88661   88661   88661   354386  354388  354387  354389
88210   89467   88530   89143   89146   89355   89355   89355   89355   353523  353519  356900  356915  89355   89355   89355   89355   357778  353521  356902  356914
88211   88842   88506   89364   88767   89784   89784   89784   89784   353343  353345  355014  355012  89784   89784   89784   89784   355412  353346  357806  355018
88212   1169    1167    88469   89586   89271   89271   89271   89271   97466   350978  353064  350985  89271   89271   89271   89271   350984  350979  353063  357449
88213   89720   88909   89665   89129   89411   89411   89411   89411   355781  355780  356837  356838  89411   89411   89411   89411   357967  355779  357965  356836

【问题讨论】:

  • 这两个枚举和 L=[line] 似乎都是多余的。真的都是代码吗?
  • 您可以尝试创建一个集以删除重复项

标签: python duplicates buffer


【解决方案1】:

您正在尝试编写一个列表,根据您的输出性质,我有两种情况。

1- 如果你想要这样的输出:
['88208 89630 88744 89078 89659 89886 89886 89886 89886 354847 354844 356602 358593 89886 89886 89886 89886 358594 354848 358594 354848 35]76 '5786 ......
......
然后改变这个 --> f2.write('{}\n'.format(str(newlist)))

  1. 输出如下:
    88208 89630 88744 89078 89659 89886 89886 89886 89886 354847 354844 356602 358593 89886 89886 89886 89886 358594 354848 358678
    55660 ………… .......

然后改变这个 --> f2.write('{}\n'.format(newlist[0]))

【讨论】:

  • 忘了,你需要:L=[line.strip()]
【解决方案2】:

此代码有效并删除重复项:

with open('file.txt', 'r') as f1:
    with open('withoutduplicates.txt', 'w') as f2:
        lines = f1.readlines()
        for line in lines:
            L = line.strip().split(' ')
            new_line = set([l.strip() for l in L if l])
            f2.write('{}\n'.format('  '.join(new_line)))

【讨论】:

  • 你确定吗?我已经对其进行了测试,但它不起作用。我正在尝试一种可见或独特的解决方案,但我无法做到。
  • 使用上面列出的相同输入对我有用
  • 这是您的输出吗,您以两种不同的格式显示的内容?如果是,那么您将看到重复项仍然存在
  • 您可以忽略我的第一个答案,即仅解决您遇到的问题“TypeError:预期字符缓冲区对象”,但不删除重复项
  • 但在我的第二个答案中,代码将删除所有重复项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 2016-07-26
  • 2019-05-12
  • 2015-12-29
  • 2012-10-09
  • 2011-10-04
  • 2014-06-08
相关资源
最近更新 更多