AttributeError:'list'对象没有属性'close'

时间:2013-10-15 15:04:17

标签: python

我有一个Python脚本,我打开两个文件进行阅读,当我试图关闭它们时,它会抛出 AttributeError:'list'对象没有属性'close' 错误。

我的剧本摘录如下:

firstFile = open(jobname, 'r').readlines()  
secondFile = open(filename, 'r').readlines()  
{  
    bunch of logic  
}  
firstFile.close()  
secondFile.close()

4 个答案:

答案 0 :(得分:9)

firstFilesecondFile不代表实际文件,它们是行列表。要解决此问题,请保存文件句柄。

firstFile = open(jobname, 'r')
firstFileData = firstFile.readlines()  
secondFile = open(filename, 'r')
secondFileData = secondFile.readlines()  

# bunch of logic ...

firstFile.close()  
secondFile.close()  

或者,您可以使用with构造:

with open(jobname, 'r'), open(filename, 'r') as firstFile, secondFile:
    firstFileData = firstFile.readlines()  
    secondFileData = secondFile.readlines()  

    # bunch of logic...

答案 1 :(得分:5)

.readlines()返回一个列表。你真的想做这样的事情:

with open(jobname) as first, open(filename) as second:
    first_lines = first.readlines()
    second_lines = second.readlines()

with块会自动关闭并清理文件句柄。

此外,您可能实际上并不需要读取行,除非您确实希望将该文件的全部内容放在内存中。您可以直接遍历文件本身:

for line in first:
    #do stuff with line

或者如果长度相同:

for line_one, line_two in zip(first, second):
    # do things with line_one and line_two

答案 2 :(得分:3)

虽然其他情况正确,但您也可以使用自动资源管理:

with open(jobname, 'r') as f:
    first_file_lines = f.readlines()
with open(filename, 'r') as f:
    second_file_lines = f.readlines()

# your logic on first_file_lines and second_file_lines here

在阅读完所有内容之后,您不需要保持文件处于打开状态。

答案 3 :(得分:1)

在使用open创建文件对象后,立即调用readlines()方法,其结果随后绑定到变量,即firstfile不是文件,而是列表字符串(文件中的行),而对实际文件的引用丢失。 secondFile也是如此。试试这个:

firstFile = open(jobname, 'r')
lines = firstFile.readlines()  
...
firstFile.close()