Использование формата таблицы Excel в Python - PullRequest
0 голосов
/ 22 июня 2011

У меня есть таблица Excel, сохраненная в формате CSV, которая выглядит примерно так (если она в Excel), это немного дольше:

    Monday  Tuesday     Wednesday   Thursday    Friday
marsbar 9   8   0   6   5
reeses  0   0   0   9   0
twix    2   3   0   5   6
snickers    9   8   0   6   5

(формат не идеален, но вы получаете суть - конфеты/день).Я хочу написать программу для python, в которой я мог бы ввести список имен конфет в программе

>>> ['twix', 'reeses']

, и это дало бы мне дни недели, в которые эти батончики были съедены, и какв этот день было съедено много конфет в списке.Результат будет выглядеть примерно так:

Monday 2
Tuesday 3
Wednesday 0
Thursday 14
Friday 6

Может ли кто-нибудь помочь мне написать такую ​​программу?

Ответы [ 5 ]

3 голосов
/ 22 июня 2011

Мы можем помочь вам написать такую ​​программу, да.

Мы не будем писать программу для вас (дело не в StackOverflow).

Python поставляется с CSV-модулем , который будет считывать сохраненный в Excel файл CSV.

Вы можете хранить свои данные в словаре , что облегчит их извлечение.

Удачи!

2 голосов
/ 22 июня 2011

Лучше всего использовать пакет csv, встроенный в python.Это позволит вам зацикливаться на строках, каждый раз давая вам список, например:

import csv
candy_reader = csv.reader(open('candy.csv', 'rb'))

for row in candy_reader:
  if row[0] in candy_to_find:
    monday_total += row[1]
    # etc.    

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

2 голосов
/ 22 июня 2011

Может быть с CSV-модулем

Я полагаю, что разделителем является символ табуляции (\t)

import csv
reader = csv.reader(open('csv_file.csv', 'rb'), delimiter='\t')
for row in reader:
    print row

>>>['Monday','Tuesday', 'Wednesday', 'Thursday', 'Friday']
['marsbar', '9', '8','0', '6', '5']
['reeses', '0', '0', '0', '9', '0']
['twix', '2', '3', '0', '5', '6']
['snickers', '9', '8', '0',  '6',  '5']
1 голос
/ 22 июня 2011

В дополнение к другим ответам вы также можете взглянуть на модуль xlrd, так как он может напрямую работать с электронными таблицами Excel, если вы не хотите заниматься CSV-бизнесом.Модуль позволяет вам читать все (или диапазоны) строк / столбцов за раз, а также захватывать отдельные ячейки, и вы можете перебирать все, чтобы найти то, что вы хотите, а затем вернуть любые связанные «значения», которые вы хотите в той же строке/ столбец, из которого вы нашли критерии поиска.

0 голосов
/ 22 июня 2011

Некоторые полезные биты:

Если у вас есть список списков, таких как

[['marsbar', 0, 1, 2, 3, 4], ['twix', 3, 4, 5, 6, 7]]

(который вы сможете получить с помощью модуля csv)

Возможно, вы захотите преобразовать его в словарь, где первый элемент каждого списка используется для ключа, а остальные составляют значение. Вы можете сделать это с чем-то вроде

dict((x[0], x[1]) for x in list_of_lists)

Вы также можете найти несколько ключей с пониманием списка:

[the_dict[key] for key in key_list]

Это дает вам список списков, где вы хотите суммировать первые элементы каждого списка, вторые элементы и т.д. , все вторые элементы и т. д., а затем суммировать внутренние списки.

[sum(x) for x in zip(*the_requested_candybars)]

Функция zip() принимает несколько аргументов; * здесь превращает список списков в несколько аргументов списка.

Мы можем zip снова сопоставить названия недель с суммами.

...