2017-07-28 102 views
-1

我有这样的代码:TypeError:'file'对象没有属性'__getitem__'是什么意思?

 My_Directory = r"/Users/schuylerraeschroerborges/Desktop/Mars_Project/mcam_image_and_label/0984MR0043380090502893E01_DRCL"  # Get data from directory 
    My_Extension = ".LBL" 

    WorkingDirectory = "/Users/schuylerraeschroerborges/Desktop/Mars_Project/" # Work in same directory 

    f = open('mcam_image_and_label/0984MR0043380090502893E01_DRCL.LBL','r') # Open label file 
    lines = f.readlines() #index lines 
    g = open('Expanded_data.csv','w+') # Write in excel spreadsheet 
    lines = g.readlines() 


    ID_line = f[21] 
    ID = re.split('"',f[21])[2] 
    LO_line = f[134] 
    LO = re.split('(',f[134])[2] 
    DI_line = f[442] 
    DI = re.split('=',f[442])[2] 
    AZ_line = f[445] 
    AZ = re.split('=',f[445])[2] 
    VE_line = f[446] 
    VE = re.split('=',f[446])[2] 
    newline = ID + '\t' + LO + '\t' + DI + '\t' + AZ + '\t' + VE + '\n' 
    g.writelines(newline) 

我一直在流汗这个错误,类型错误:“文件”对象有没有属性“_getitem__”,之后我运行在Python 2.7的代码。这个错误是什么意思?我需要更改文件的名称或其他内容吗?

+0

您将这些行存储在'lines'中,而不是'f'; 'f'是文件对象。 (你可能不想在输出文件中调用'readlines()') – Ryan

回答

0

您正在尝试将索引对象f这是一个file类似于由open()函数返回的对象。

在内部,索引是通过__getitem__特殊方法实现的,file对象没有实现,这就是您看到该错误消息的原因。

错误发生在您尝试分配的行ID_lines = f[21],也许您想要分配lines[21]

+0

当我将“f [21]”更改为“lines [21]”时出现此错误:IndexError:列表索引超出范围 – Mark

+1

@Mark:这可能是因为你用从'g'中读取的空行列表覆盖了从'f'读取的'行'(当你用''w +“'模式打开时,它被截断)。 – Blckknght

+0

好的。谢谢你们!!! – Mark

相关问题