我有一个列表
paths = ['1.xlsx', '2.xlsx', '3.xlsx', '4.xlsx', '5.xlsx', '6.xlsx', '7.xlsx', '8.xlsx', '9.xlsx']
具有文件名
和函数sum_invoice(path)
它返回指定文件中的sum或total
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 :(得分:3)
标准库中已有sum()
函数。您应该将您的功能重命名为sum_path()
或类似。
然后,您可以使用generator expression sum()
作为:
sum(sum_path(p) for p in paths)
答案 1 :(得分:2)
您可以像下面这样实现,但首先需要将sum
函数重命名为my_sum
(因为sum()
是一个您不应该覆盖的内置函数) :
sum_all = sum(my_sum(path) for path in paths)
修改强>
现在,您的自定义和功能已重命名为sum_invoice
,您可以使用:
sum_all = sum(sum_invoice(path) for path in paths)
以上行使用生成器表达式,有关此主题的更多详细信息,您可以查看此PEP 289 -- Generator Expressions。 for循环的简单解决方案如下:
sum_all = 0
for path in paths:
s = sum_invoice(path)
sum_all += s