为了账号安全,请及时绑定邮箱和手机立即绑定

重复的数字在Python中读取文本文件

重复的数字在Python中读取文本文件

慕尼黑的夜晚无繁华 2021-05-30 10:52:32
我有一个 Python 脚本,我试图用它来打印Duplicate.txt文件中的重复数字:newList = set()datafile = open ("Duplicate.txt", "r")for i in datafile:    if datafile.count(i) >= 2:        newList.add(i)datafile.close()print(list(newList))我收到以下错误消息,有人可以帮忙吗?AttributeError: '_io.TextIOWrapper' object has no attribute 'count'
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

问题恰恰是它所说的:文件对象不知道如何计数。它们只是迭代器,而不是列表或字符串之类的东西。


造成这种情况的部分原因是,一遍又一遍地扫描整个文件可能会非常缓慢。


如果你真的需要使用count,你可以先把这些行放到一个列表中。列表是完全在内存中的,因此一遍又一遍地扫描列表并没有那么慢,并且列表有一种count方法可以完全满足您的要求:


datafile = open ("Duplicate.txt", "r")

lines = list(datafile)


for i in lines:

    if lines.count(i) >= 2:

        newList.add(i)


datafile.close()

但是,有一个更好的解决方案:只需在进行时保持计数,然后保留 >= 2 的计数。实际上,您可以将其写成两行:


counts = collections.Counter(datafile)

newList = {line for line, count in counts.items() if count >= 2}

但是,如果您不清楚为什么这样做,您可能希望更明确地进行操作:


counts = collections.Counter()

for i in datafile:

    counts[i] += 1

newList = set()

for line, count in counts.items():

    if count >= 2:

        newList.add(line)

或者,如果您甚至不了解以下内容的基础知识Counter:


counts = {}

for i in datafile:

    if i not in counts:

        counts[i] = 1

    else:

        counts[i] += 1


查看完整回答
反对 回复 2021-06-01
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您代码中的错误正在尝试应用count到文件句柄,而不是list。


无论如何,您不需要计数元素,只需要查看文件中是否已经存在该元素。


我建议使用一个标记集,以记下已经发生了哪些元素。


seen = set()

result = set()

with open ("Duplicate.txt", "r") as datafile:

    for i in datafile:

        # you may turn i to a number here with: i = int(i)

        if i in seen:

            result.add(i)  # data is already in seen: duplicate

        else:

            seen.add(i)  # next time it occurs, we'll detect it


print(list(result))  # convert to list (maybe not needed, set is ok to print)


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信