2016-12-01 4 views
1

У меня есть списоксумма различных файлов в массиве

paths = ['1.xlsx', '2.xlsx', '3.xlsx', '4.xlsx', '5.xlsx', '6.xlsx', '7.xlsx', '8.xlsx', '9.xlsx'] 

, который имеет название файла

и функцию sum_invoice(path) возвращает сумму или сумму в указанном файле

import glob 
import pandas as pd 
from pandas.io.excel import ExcelFile 
def sum_invoice(path): 
    xl = ExcelFile(path) 
    for sheet in xl.sheet_names: 
     df = xl.parse(sheet) 
     xy=df['INVOICE'] 
     nn=pd.to_numeric(xy, 'coerce') 
     nn = nn.reset_index(drop=True) 
     nn.fillna(0) 
     total=nn.loc[nn.last_valid_index()] 
     return total 
#create list of files named paths 
paths =[] 
for path in glob.iglob('*.xlsx'): 
    paths.append(path) 
    print(path) 


sum_all = sum(sum_invoice(path) for paths in paths) 
print sum_all 

как перебрать этот файл с помощью функции, а также суммировать общее количество возвращаемых из всех файлов.

+0

Итак, это Python 2 или Python 3 конкретный вопрос? –

+0

python 2.7 @ Juanpa.arrivillage –

+0

Как создаются структуры файлов? – inspectorG4dget

ответ

2

Вы можете добиться того, что, как показано ниже, но вам нужно сначала переименовать sum функцию к чему-то вроде my_sum (потому что sum() является встроенная функция, которую вы не должны переопределять):

sum_all = sum(my_sum(path) for path in paths) 

Edit:

Теперь, что ваша функция пользовательской суммы переименована в sum_invoice, вы можете использовать:

sum_all = sum(sum_invoice(path) for path in paths) 

В приведенной выше строке используется выражение генератора, для получения дополнительной информации об этой теме вы можете проверить это PEP 289 -- Generator Expressions. Простое решение с циклом выглядит следующим образом:

sum_all = 0 

for path in paths: 
    s = sum_invoice(path) 
    sum_all += s 
+1

. Is 'sum 'в этом контексте встроенная' sum' или их функция 'sum (path)'? –

+0

Это не сработает для OP, потому что встроенная сумма затенена –

+3

Это не понимание списка. Это выражение генератора. –

3

Существует уже sum() функции в стандартной библиотеке. Вы должны переименовать свою функцию в sum_path() или аналогичную.

Тогда вы можете добиться того, что вы хотите с помощью generator expression с sum() как:

sum(sum_path(p) for p in paths) 
Смежные вопросы