zoukankan      html  css  js  c++  java
  • panda实现自动化表格

    堡垒机访问记录

    '''
    堡垒机访问记录自动化
    '''
    
    import pandas as pd
    import numpy as np
    
    # 显示全部列
    pd.options.display.max_columns = 999
    # 列对齐
    pd.set_option('display.unicode.ambiguous_as_wide', True) 
    pd.set_option('display.unicode.east_asian_width', True)
    # 常量
    total = pd.read_excel('/Users/soymilk/微云同步助手(296672942)/OY/excel_auto/bastion/堡垒机访问记录.xlsx')
    ori_cent_date = pd.read_excel('/Users/soymilk/微云同步助手(296672942)/OY/excel_auto/bastion/核心数据库.xlsx')
    ip_list = ori_cent_date.IP.tolist()
    center_data = pd.DataFrame()
    
    # ---【2】会话大小---
    
    # 转化单位为KB
    
    for x in range(0,len(total)):
        y = total.iloc[x,12]
        if 'MB' in y:
            y = y.replace('MB','')
            y = float(y) * 1024
            y = int(y)
            y = str(y) + 'KB'
            total.iloc[x,12] = y
        elif 'GB' in y:
            y = y.replace('GB','')
            y = float(y) * 1024 * 1024
            y = int(y)
            y = str(y) + 'KB'
            total.iloc[x,12] = y
        elif 'TB' in y:
            y = y.replace('TB','')
            y = float(y) * 1024 * 1024 * 1024
            y = int(y)
            y = str(y) + 'TB'
            total.iloc[x,12] = y
        else:
            y = y  
            total.iloc[x,12] = y
    
    # 会话总和
    
    data_size = total['会话大小'].apply(lambda x:x[:-2])
    data_size = data_size.astype('int64')
    data_size_sum = data_size.sum()
    
    if 4 <= len(str(data_size_sum)) < 7:
        data_size_sum = '%.2f' % (data_size_sum / 1024)
        data_size_sum = str(data_size_sum) + 'MB'
    elif 7 <= len(str(data_size_sum)) < 10:
        data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024)
        data_size_sum = str(data_size_sum) + 'GB'
    elif 10 <= len(str(data_size_sum)) < 13:
        data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024 / 1024)
        data_size_sum = str(data_size_sum) + 'TB'
    else:
        data_size_sum = str(data_size_sum) + 'KB'   
    
    # ---【2】核心数据库---
    
    # 开局定义空DataFrame,迭代相加
    for i in ip_list:    
        center_data = center_data.append(total.loc[total['主机IP']==i])
    
    # ---【3】汇总---
    
    total_sum_data = {
            '项目':['本周运维次数','核心数据库传输量'],
            '数值':[len(total.index),data_size_sum]
            }
    total_sum = pd.DataFrame(total_sum_data,index=['本周运维次数','核心数据库传输量'],columns=['项目','数值'])
    
    # ---【4】保存导出excel---
    
    writer = pd.ExcelWriter('/Users/soymilk/微云同步助手(296672942)/OY/excel_auto/bastion/bastion_finish/堡垒机访问记录finish.xlsx')
    # center_date.set_index('类型')
    total_sum.to_excel(writer,sheet_name='汇总')
    total.to_excel(writer,sheet_name='会话大小')
    center_data.to_excel(writer,sheet_name='核心数据库')
    writer.save()
    print('auto_excle success')

    知识点:

    读取excel文件

    total = pd.read_excel('/Users/soymilk/微云同步助手(296672942)/OY/excel_auto/bastion/堡垒机访问记录.xlsx')
    ori_cent_date = pd.read_excel('/Users/soymilk/微云同步助手(296672942)/OY/excel_auto/bastion/核心数据库.xlsx')
    print(total)

    DataFrame转化为list

    ip_list = ori_cent_date.IP.tolist()

    循环实现迭代相加

    ip_list = ori_cent_date.IP.tolist() # 转化为list好实现循环(可能有更好的方法)
    center_data = pd.DataFrame()  # 定义空的DataFrame
    for i in ip_list:    
        center_data = center_data.append(total.loc[total['主机IP']==i])
    print(center_data)

    # 数字迭代

    # a = [11,22,33,44,55,66,77,88,99]
    # sum_a = 0
    # for i in a:
    # sum_a += i
    # print(sum_a)

    if elif else的运用

    for x in range(0,len(total)):
        y = total.iloc[x,12] # 列的id为12
        if 'MB' in y:        # 如果y包含字符串'MB'
            y = y.replace('MB','') # 删除'MB'(将'MB'替换为空字符串)
            y = float(y) * 1024 # 转化为浮点型乘以1024转化单位为'KB'
            y = int(y) # 转化为整数
            y = str(y) + 'KB' # 转化为字符串 并加上字符串'KB',形成最终想要的效果
            total.iloc[x,12] = y # 将最终的结果赋值给total.iloc[x,12]
        elif 'GB' in y:
            y = y.replace('GB','')
            y = float(y) * 1024 * 1024
            y = int(y)
            y = str(y) + 'KB'
            total.iloc[x,12] = y
        elif 'TB' in y:
            y = y.replace('TB','')
            y = float(y) * 1024 * 1024 * 1024
            y = int(y)
            y = str(y) + 'TB'
            total.iloc[x,12] = y
        else:
            y = y  
            total.iloc[x,12] = y

    会话总和

    # 会话总和
    
    data_size = total['会话大小'].apply(lambda x:x[:-2]) # 只从倒数第2位开始取值(不包含倒数第2位)
    data_size = data_size.astype('int64') # 转化为整形
    data_size_sum = data_size.sum()
    
    if 4 <= len(str(data_size_sum)) < 7:
        data_size_sum = '%.2f' % (data_size_sum / 1024) # 只取小数点后2位
        data_size_sum = str(data_size_sum) + 'MB'
    elif 7 <= len(str(data_size_sum)) < 10:
        data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024)
        data_size_sum = str(data_size_sum) + 'GB'
    elif 10 <= len(str(data_size_sum)) < 13:
        data_size_sum = '%.2f' % (data_size_sum / 1024 / 1024 / 1024)
        data_size_sum = str(data_size_sum) + 'TB'
    else:
        data_size_sum = str(data_size_sum) + 'KB'   
  • 相关阅读:
    Asp.Net选择TreeView前面的复选框引起回发
    Asp.Net自动发送邮件代码
    Asp.Net类型转换类(通用类)
    Eclipse 快捷键
    结对项目开发之电梯调度问题
    输出文章中几个最高频率单词和次数
    求整数数组中和最大的子数组的和
    Android定位功能(二)
    分布式拒绝服务攻击(DDoS)原理及防范
    定义Profile用户文件详解
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/13858689.html
Copyright © 2011-2022 走看看