2012-06-12 3 views
2

У меня есть файл excel, который имеет 3 столбца.
пример нижеPython Sum excel file

Name  Produce  Number 
Adam  oranges  6 
bob  Apples  5 
Adam  Apples  4 
steve  Peppers  7 
bob  Peppers  16 
Adam  oranges  5 

мне нужно генерировать сумму в питона таким образом

Name  Produce  Number 
Adam  oranges  11 
bob  apples  5 
steve  peppers  7 
etc 

Я новичок в Python и пытается выяснить, как писать вывод каждый человек насчитывает ? есть ли простой способ собрать эти данные из excel?

+0

Это довольно легко, если вы знаете, где в библиотеке Python к смотреть. Вам уже удалось открыть файл Excel в Python? –

+1

yes Я могу открыть файл в excel, но сначала мне нужно открыть файл excel, чтобы записать его на python? –

+2

Ждите, можете ли вы переделать: «Уметь писать на python?» – tabchas

ответ

3

Вот код для этого:

обязательно посмотрите на комментарии и отправить назад здесь, если у вас есть какие-либо вопросы (или если я сделал какие-либо ошибки)

import csv 

file = open('names.csv', "rb") #Open CSV File in Read Mode 
reader = csv.reader(file)  #Create reader object which iterates over lines 

class Object:     #Object to store unique data 
    def __init__(self, name, produce, amount): 
     self.name = name 
     self.produce = produce 
     self.amount = amount 

rownum = 0 #Row Number currently iterating over 
list = [] #List to store objects 

def checkList(name, produce, amount): 

    for object in list: #Iterate through list   
     if object.name == name and object.produce == produce: #Check if name and produce combination exists 
      object.amount += int(amount) #If it does add to amount variable and break out 
      return 

    newObject = Object(name, produce, int(amount)) #Create a new object with new name, produce, and amount 
    list.append(newObject) #Add to list and break out 


for row in reader: #Iterate through all the rows 
    if rownum == 0: #Store header row seperately to not get confused 
     header = row 
    else: 
     name = row[0] #Store name 
     produce = row[1] #Store produce 
     amount = row[2] #Store amount 

     if len(list) == 0: #Default case if list = 0 
      newObject = Object(name, produce, int(amount)) 
      list.append(newObject) 
     else: #If not... 
      checkList(name, produce, amount) 


rownum += 1 

for each in list: #Print out result 
    print each.name, each.produce, each.amount 

file.close() #Close file 
+0

Вы - спасатель. –

+0

Я запускаю его, и я получаю результат просто - - - Адам Апельсины 5 Он ищет другие имена и подытоживает итог для Адама и апельсинов, я пытаюсь с этим справиться ..... позвольте мне посмотрим, что я могу получить. Будет ли шанс попытаться устранить проблему, но все советы будут полезны :) –

+1

Да, я вижу проблему ... одна секунда, которую я пытаюсь исправить ... жаль, что я просто отправлю то, что у меня было без действительно испытывая его. – tabchas

2

Должно быть очень просто, как только вы открыть файл Excel. Если он сохраняется в виде файла .csv, используйте эту документацию: http://docs.python.org/library/csv.html

Используйте эту ссылку, чтобы затем перебирать записи и получить сумму каждого из имени и типа: http://www.linuxjournal.com/content/handling-csv-files-python

+1

+1 для 'csv' - путь проще в использовании, чем' xlrd' - особенно, если вам не важно форматирование –

+1

Да, обычно люди не оставляют его в excel так как вы можете легко сохранить его как .csv. – tabchas

+0

Как бы я суммировал столбец чисел, у меня проблема с этим. Я хочу, чтобы все строки с «bobs» «яблоки» были общей суммой всех строк, содержащих эти два? Извините, наверное, очень просто –