2016-12-01 2 views
1

ich eine Liste habenSumme aus verschiedenen Dateien in einem Array

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

, die Namen der Datei hat

und Funktion sum_invoice(path) es gibt Summe oder insgesamt in der angegebenen Datei

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 

wie man mit der Funktion über diese Datei iteriert und auch die Summe aller Dateien addiert.

+0

Also, das ist ein Python 2 oder eine Python 3 spezielle Fragen? –

+0

Python 2.7 @ Juanpa.arrivillage –

+0

Wie sind die Dateien Strukturen? – inspectorG4dget

Antwort

2

Sie können das erreichen, wie unten, aber Sie müssen zuerst Ihre sum Funktion zu so etwas wie my_sum umbenennen (weil sum() ist eine eingebaute Funktion, die Sie nicht außer Kraft setzen sollte):

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

Edit:

Nun, dass Ihre benutzerdefinierten Summenfunktion zu sum_invoice umbenannt wird, können Sie:

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

Die obige Zeile verwendet Generatorausdruck, für weitere Details zu diesem Thema können Sie dies überprüfen PEP 289 -- Generator Expressions. Eine einfache Lösung mit for-Schleife sieht folgendermaßen aus:

sum_all = 0 

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

Is 'sum ist 'in diesem Zusammenhang die eingebaute' sum' oder ihre Funktion 'sum (path)'? –

+0

Dies funktioniert nicht für OP, da die eingebaute Summe beschattet wird –

+3

Das ist kein Listenverständnis. Das ist ein Generatorausdruck. –

3

Es gibt bereits eine sum()-Funktion in der Standardbibliothek. Sie sollten Ihre Funktion in sum_path() oder ähnlich umbenennen.

Dann können Sie erreichen, was Sie wollen, indem Sie eine generator expression mit sum() als mit:

sum(sum_path(p) for p in paths) 
Verwandte Themen