与打开一起使用,我得到的文件对象没有属性计数

时间:2019-01-28 15:56:10

标签: python

我写了以下对我来说没问题的代码,但是当我运行它时,出现错误:

#!/usr/bin/env python2.7

with open("helloworld.txt", "r") as fcontent:
    lc = 0
    for eachline in fcontent:
        lc += 1
        if fcontent.count(eachline) > 1:
            print(lc,eachline)

我得到的错误:

Traceback (most recent call last):
  File "./openfile.py", line 7, in <module>
    if fcontent.count(eachline) > 1:
AttributeError: 'file' object has no attribute 'count'

我在做什么错?我觉得它很小,但我似乎无法弄清楚。我怀疑是因为我正在使用with open。当我在没有with的情况下扫描文件时,没有任何错误:

#!/usr/bin/env python2.7

from sys import exit

filec = open("hellowDup.txt", "r")
fcontent = filec.readlines()
lc = 0
for eachline in fcontent:
    lc += 1
    if fcontent.count(eachline) > 1:
        print(lc,eachline)
exit(0)

3 个答案:

答案 0 :(得分:2)

.count()list对象的方法。

  

list.count(x)

     

返回x在列表中出现的次数。

     

(来源:https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

它不是file对象的方法。所以你不能在那里使用它。在第二个示例中,您正在使用.readlines()个对象的file方法读取文件:

  

readlines(hint=-1)

     

从流中读取并返回list 行。可以指定提示来控制读取的行数:   读取到目前为止所有行的总大小(以字节/字符为单位)   超出提示。

     

(来源:https://docs.python.org/3/library/io.html#io.IOBase.readlines

由于.readlines()方法返回了list,因此您可以在此处调用.count()方法。

答案 1 :(得分:2)

您是否注意到第一个代码没有FirebaseFirestoreException语句?

以下内容等同于第二个代码:

readlines()

答案 2 :(得分:1)

您也可以这样使用它:

#!/usr/bin/env python2.7
with open("hellowDup.txt", "r") as fcontent:
    lc = 0
    for i, l in enumerate(fcontent):
        print(i,l)
        i + 1