2015-08-17 2 views
2

Я пытаюсь создать файл, который содержит имена только в файле 1 и которые не находятся в файле 1. Я получаю сообщение об ошибке при запуске следующего кода:Устранение TypeError: объект 'file' не имеет атрибута '__getitem__'

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__' 

код работает, когда я ставлю я в диапазоне (1) и работать только 1 итерации, но не работает для нескольких линий.

ответ

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 для обозначения dataframe в коде:

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 

на другой ноте a == 1 внутри if g['Name'][j] == x: ничего не делает, я полагаю, вы имеете в виду a = 1.

+0

спасибо! это потрясающе. глупая ошибка с моей стороны. также ошибка # 2 при a == 1 вместо a = 1 ха-ха! –

+0

Прошу, пожалуйста. –

0

Ошибка возникает, поскольку вы пытаетесь получить доступ к экземпляру файла, например, dict.

f['First Name'] или любой другой доступ к ключам не будет работать в экземпляре файла.

Ошибка связана с функцией __getitem__, которая в любое время вызывается под капотом, чтобы попытаться использовать [] для индексации в объект, как правило, с помощью диктофона или аналогичной ключевой структуры.

+0

Игнорируйте этот ответ. Теперь я вижу, что ваш экземпляр файла должен быть экземпляром файла CSV, который должен предлагать интерфейс '__getitem__'. Просто имейте в виду, что обычные экземпляры файлов не предлагают этот интерфейс. –

Смежные вопросы