Электронная таблица Excel для чтения определенного столбца python

Я знаю, что для некоторых это может быть довольно просто, но я новичок в python.

Я искал способ написать программу специально для столбца в электронной таблице Excel. Пример (взято из предыдущего вопроса)

Name Date Age Sex Color
Ray  May  25.1 M  Gray
Alex Apr  22.3 F  Green
Ann  Jun  15.7 F  Blue

Мне нужно, чтобы вся информация Алекса в его строке отображалась, когда я набираю Alex. Электронная таблица, которую я использую, содержит тысячи имен, где все в первом столбце отличается. Я уже импортировал xlrd и электронную таблицу в python (2.7).

Пожалуйста помоги!

Мой код, с выполнением которого у меня проблемы.

from collections import namedtuple  
Entry = namedtuple('Entry', 'FQDN Primary Secondary')  
import xlrd 
file_location = "/Users/abriman26/Desktop/Book1.xlsx"  
ss_dict = {}  
spreadsheet = file_location = "/Users/abriman26/Desktop/Book1.xlsx"  
for row in spreadsheet:
    entry = Entry(*tuple(row))
    ss_dict[entry.Name] = entry

и сообщение об ошибке

Traceback (most recent call last):
File "<pyshell#114>", line 2, in <module>
entry = Entry(tuple(row))
TypeError: __new__() takes exactly 6 arguments (2 given)

person user3726972    schedule 10.06.2014    source источник


Ответы (1)


Я предполагаю, что ваш вопрос был больше направлен на то, как хранить информацию из электронной таблицы в памяти, чтобы вы могли быстро искать данные, а не на то, как использовать библиотеку xlrd. Если это не так, уточните свой вопрос и включите пример кода того, что вы пробовали.

Если столбец A является ключом, создайте словарь, содержащий кортежи или namedtuples.

from collections import namedtuple
Entry = namedtuple('Entry', 'Name Date Age Sex Color')

#open the spreadsheet with xlrd or other spreadsheet library and save into variable named "spreadsheet"
#...
ss_dict = {}
for row in spreadsheet:
    entry = Entry(*tuple(row))
    ss_dict[entry.Name] = entry

>> ss_dict['Alex']
Entry(Ann, Jun, 15.7, F, Blue)

Это даст вам быстрый произвольный доступ к записи в электронной таблице, если вы знаете имя человека, особенно если у вас много записей.

person IceArdor    schedule 10.06.2014
comment
Я ценю помощь! Буквально провел эту и последнюю неделю, изучая Python, и вы абсолютно правы, это то, что мне было нужно. Я запустил ваш код, но продолжал получать ошибку Traceback (последний последний вызов): Файл ‹pyshell#107›, строка 2, в ‹module› запись = Entry(*tuple(row)) TypeError: __new__() принимает ровно 6 аргументов (2 дано) Не ​​знаю, что делать, я использовал его для своей электронной таблицы и получил аналогичную ошибку, все еще новичок, извините! - person user3726972; 11.06.2014
comment
Узнайте об операторе списка аргументов распаковки (*) здесь: docs. python.org/2/tutorial/ и stackoverflow.com/questions/2921847/. Чтобы решить эту проблему самостоятельно, попробуйте вывести len(tuple(row)) в цикле for. Согласуется ли длина с вашим определением класса Entry namedtuple для всех строк? - person IceArdor; 11.06.2014
comment
Это сработало, спасибо! К сожалению, теперь они хотят, чтобы я преобразовал его в csv, а затем сделал то же самое. - person user3726972; 12.06.2014
comment
используйте модуль Python csv (import csv) - person IceArdor; 12.06.2014
comment
Эй, прошло несколько дней, и я до сих пор не могу полностью понять это, мой csv имеет более 1000 строк, 3 столбца, мне нужно прочитать определенную строку, а не на основе чисел. Единственные учебные пособия, которые я вижу, показывают строку [5], мне нужно ввести фактическое имя, ajj56exp.tub.com, а рядом с ним будет 2 имени. Должен ли я просто опубликовать еще один вопрос с чистого начала? - person user3726972; 16.06.2014