【问题标题】:Resolving TypeError: 'file' object has no attribute '__getitem__'解决 TypeError:“文件”对象没有属性“__getitem__”
【发布时间】:2015-08-17 16:00:15
【问题描述】:

我正在尝试创建一个仅包含文件 1 上的名称而不包含文件 1 的文件。运行以下代码时出现错误:

import pandas
import csv
f = pandas.read_csv('hillelclass2019.csv')
g = pandas.read_csv('shabsignup.csv')
for i in range(193): #length of data1
    x = str(f['First Name'][i]) + " " + str(f['Last Name'][i]) #first name + last name
    a = 0 #initial
    for j in range(25): #length of data2
        if g['Name'][j] == x: #if name == name on other sheet, then a == 1
            a == 1
    if a == 0: #if names are not equal 
        with open('noshab.csv', 'a') as f: #write name to file
            wtr = csv.writer(f, delimiter= ',')
            wtr.writerow( [x,i])

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/var/folders/kz/351q8p011qjc2x4k9srypcqc0000gn/T/tmpf4VgQX.py in <module>()
      5 g = pandas.read_csv('shabsignup.csv')
      6 for i in range(193): #length of data1
----> 7     x = str(f['First Name'][i]) + " " + str(f['Last Name'][i]) #first name + last name
      8     a = 0 #initial
      9     for j in range(25): #length of data2

TypeError: 'file' object has no attribute '__getitem__' 

当我将 i 设置在 range(1) 中并且只运行 1 次迭代时,该代码有效,但不适用于多行。

【问题讨论】:

    标签: python database file csv


    【解决方案1】:

    您已将f 绑定到循环中的文件对象,因此在一次迭代后它不再指向您的df,因此f['First Name'][i]file_object['First Name'][i] 而不是your_dataframe['First Name'][i],所以它显然失败了:

    with open('noshab.csv', 'a') as f: # <- f is now a file object
    

    将名称从 f = pandas.read_csv('hillelclass2019.csv') 更改为 df = pandas.read_csv('hillelclass2019.csv') 并使用 df 引用代码中的数据框:

    df = pandas.read_csv('hillelclass2019.csv')
    g = pandas.read_csv('shabsignup.csv')
    for i in range(193): #length of data1
        x = str(df['First Name'][i]) + " " + str(df['Last Name'][i]) #first name + last name
    

    另一方面,if g['Name'][j] == x: 中的 a == 1 什么也不做,我想你的意思是 a = 1

    【讨论】:

    • 谢谢!太棒了。我的愚蠢错误。还有错误#2 在 a == 1 而不是 a=1 哈哈!
    【解决方案2】:

    发生错误是因为您尝试像 dict 一样访问文件实例。

    f['First Name'] 或任何其他密钥访问对文件实例不起作用。

    错误是指__getitem__ 函数,该函数在任何时候都会在后台调用以尝试使用[] 来索引对象,通常是字典或类似的键控结构。

    【讨论】:

    • 忽略这个答案,我现在看到你的文件实例应该是一个 CSV 文件实例,它应该提供一个__getitem__ 接口。请注意,普通文件实例不提供此接口。
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 2012-10-15
    • 2014-01-16
    • 2017-02-27
    • 2018-01-28
    • 2014-06-10
    • 2012-10-16
    • 2015-11-04
    相关资源
    最近更新 更多