Python 统计多个excel中某个label对应的值(没有区分sheet功能)

###environment###
### $ pip install xlrd
### $ pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

#coding:utf-8
import pandas as pd
import os

def read_excel_function(execl_path, name_1, name_2):
    df=pd.read_excel(execl_path)
    #df=pd.read_csv(execl_path, encoding='gbk') #处理csv
    excel_data = {}
    excel_data_list = []

    for i in df.index.values:#获取行号的索引,并对其进行遍历:
        if type(df.loc[i,[name_1]].to_dict()[name_1]) != str: #根据实际情况去改
            continue
        row_data_1 = df.loc[i,[name_1, name_2]].to_dict()[name_1]
        row_data_2 = df.loc[i,[name_1, name_2]].to_dict()[name_2]

        excel_data[row_data_1] = int(row_data_2)

        excel_data_list.append(excel_data)
        excel_data = {}
    return(excel_data_list)


def count_dicts(dict1, dict2):
    differ = set(dict1) ^ set(dict2) 
    same = set(dict1) & set(dict2)

    for key in same:
        dict1[key] = int(dict1[key]) + int(dict2[key])

    for key in differ:
        if key not in dict1.keys(): 
            dict1[key] = dict2[key]

def main():
    name_1 = "傻逼科目"
    name_2 = "嫖资"
    excel_dir = "excel"
    
    excel_path_list=os.listdir(excel_dir)
    excel_num = len(excel_path_list)
    result_dict = {}

    for i,excel_path in enumerate(excel_path_list):
        root_path = os.path.join(excel_dir, excel_path)
  		#动态变量
        names = locals()
        names['dict%s' % i] = read_excel_function(root_path, name_1, name_2)
    
    for i in range(excel_num):
        for n, dict_ in enumerate(names['dict%s' % i]):
            count_dicts(result_dict, dict_)
            
    print(result_dict)
    
    with open("all_count.txt",'w') as f:
        f.write('{}{} {}\n'.format(name_1, ":", name_2))
        
        for key in result_dict.keys():
            f.write('{}{} {}\n'.format(key, ":", result_dict[key]))
            
if __name__ == '__main__':
    main()

excel大概内容:
在这里插入图片描述
参考:Python利用pandas处理Excel数据的应用

Ka.
发布了23 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/guaiderzhu1314/article/details/103971804