帮Customer Architecture写的小脚本

一个同事每月都有一个工作,就是把某个表格里面的服务器名称整理一下,再连同uptime等存到另一个report表格中。并且表示自己已经这么手动干了三年了。。。

所以花了一点时间帮忙用Python写了一个脚本,涉及到python读入写出excel表格的两种新旧格式xls和xlsx,以及一些简单的UI》

import pandas
import xlrd
import xlwt
import sys
import os
import pandas as pd
import numpy as np
import tabula
from openpyxl import load_workbook
import xlrd
import tkinter as tk
from tkinter import filedialog as fd
import datetime
from xlutils.copy import copy
import xlsxwriter

def open_exel(file = ‘./data/Availability-Monthly-Report-HK.xls‘):
    try:
        data = pd.read_excel(io=file, sheet_name=0, header=3, names=["Name", "Up_time_per", "Down_Time_per", "Up_time", "Down_Time", "Type", "Path",  "Service_level"])
        data.index = np.arange(0, len(data))
        return data
    except Exception as e:
        print(str(e))

def extract_data(data):
    try:
        use_value = []
        for i in data.index:
            ori_name = data.at[i, "Name"]
            new_name = ori_name.split(".")[0]
            data.at[i, "Name"] = new_name
            use_value.append(new_name)
            # print(new_name)
            # print(i)
        return use_value
    except Exception as e:
        print(str(e))

class Browse(tk.Frame):
    """ Creates a frame that contains a button when clicked lets the user to select
    a file and put its filepath into an entry.
    """

    def __init__(self, master, container = ‘‘, title = ‘‘, initialdir=r".",
                 filetypes=( ("All files", "*.*"), (‘Excel files‘,‘*.xlsx‘))):
        super().__init__(master)
        self.filepath = tk.StringVar()
        self.title = tk.StringVar()
        self._title = title
        self._container = container
        self._initaldir = initialdir
        self._filetypes = filetypes
        self._create_widgets()
        self._display_widgets()

    def _create_widgets(self):
        self._label = tk.Label(self, textvariable=self.title, )
        self._entry = tk.Entry(self, textvariable=self.filepath)
        self._button = tk.Button(self, text="Browse...", command=self.browse)
        self._submit = tk.Button(self, text="submit", command=self.submit)

    def _display_widgets(self):
        self.title.set(self._title)
        self._label.pack(fill=‘x‘)
        self._button.pack(side=‘left‘,)
        self._entry.pack(side=‘left‘,fill=‘x‘, expand=True)
        self._submit.pack(anchor=‘se‘)

    def browse(self):
        self.filepath.set(fd.askopenfilename(initialdir=self._initaldir,
                                             filetypes=self._filetypes))

    def submit(self):
        self._container.set_path(self.filepath.get())
        print("submit: ", self._container.get_path())
        # root.quit()

class FileBrowse(tk.Frame):
    """ Creates a frame that contains a button when clicked lets the user to select
    a file and put its filepath into an entry.
    """

    def __init__(self, master, container = ‘‘, title = ‘‘, initialdir=r"."):
        super().__init__(master)
        self.filepath = tk.StringVar()
        self.title = tk.StringVar()
        self._title = title
        self._container = container
        self._initaldir = initialdir
        self._create_widgets()
        self._display_widgets()

    def _create_widgets(self):
        self._label = tk.Label(self, textvariable=self.title, )
        self._entry = tk.Entry(self, textvariable=self.filepath)
        self._button = tk.Button(self, text="Browse...", command=self.browse)
        self._submit = tk.Button(self, text="submit", command=self.submit)

    def _display_widgets(self):
        self.title.set(self._title)
        self._label.pack(fill=‘x‘)
        self._button.pack(side=‘left‘,)
        self._entry.pack(side=‘left‘,fill=‘x‘, expand=True)
        self._submit.pack(anchor=‘se‘)

    def browse(self):
        self.filepath.set(fd.askdirectory(initialdir=self._initaldir))

    def submit(self):
        self._container.set_path(self.filepath.get())
        print("submit: ", self._container.get_path())

class plat_ui(tk.Frame):
    """ Creates a frame that contains a banch of browse
    """

    def __init__(self, parent, containers=[]):
        super().__init__(parent)
        self.filepath = tk.StringVar()
        self._containers = containers
        self._create_widgets()
        self._display_widgets()

    def _create_widgets(self):
        self._browser0 = Browse(root, title = ‘Availability monthly report‘, container = self._containers[0], filetypes=((‘Excel files‘,‘*.xls‘), ("All files", "*.*")))
        self._browser1 = Browse(root, title = ‘Target Bilag file‘, container = self._containers[1], filetypes=((‘Excel files‘,‘*.xlsx‘), ("All files", "*.*")))
        self._apply = tk.Button(root, text="apply", command=self.apply)

    def _display_widgets(self):
        self._browser0.pack(fill=‘x‘, expand=True)
        self._browser1.pack(fill=‘x‘, expand=True)
        self._apply.pack(fill=‘x‘, expand=True)

    def apply(self):
        print("processing...")
        try:
            msg = exec(self._containers[0], self._containers[1])
            popupmsg(msg)
        except Exception as e:
            popupmsg(e)

def popupmsg(msg):
    popup = tk.Tk()
    popup.wm_title("结果")
    label = tk.Label(popup, text=msg)
    label.pack(side="top", fill="x", pady=10)
    B1 = tk.Button(popup, text="Okay", command = popup.destroy)
    B1.pack()
    popup.mainloop()

class input_path():
    def __init__(self):
        #self.path = ‘‘
        pass
    def set_path(self, new_path):
        self.path = new_path
    def get_path(self):
        return self.path

def exec(path0, path1):
    template_path = path0.get_path()
    target_path = path1.get_path()
    mid_output = ‘./data/mid_output.xls‘
    final_output = ‘./data/final_output.xlsx‘

    repdata = open_exel(template_path)
    use_value = extract_data(repdata)
    # rb =  xlrd.open_workbook(template_path)
    # wb = copy(rb)
    # ws = wb.get_sheet(0)
    # for i in range(len(use_value)):
    #     ws.write(i+4, 1, use_value[i])
    # wb.save(mid_output)

    book = load_workbook(filename = target_path)
    # active_book = book.active
    raw_sheet = book[‘Raw‘]
    count = 0
    counter = 0
    for row in raw_sheet.iter_rows(min_row=2):
        count += 1
    if count <= len(use_value):
        for row in raw_sheet.iter_rows(min_row=2, max_row=len(use_value)+1):
            row[0].value = repdata[‘Name‘][counter]
            row[1].value = repdata[‘Up_time_per‘][counter]
            row[2].value = repdata[‘Down_Time_per‘][counter]
            row[3].value = repdata[‘Up_time‘][counter]
            row[4].value = repdata[‘Down_Time‘][counter]
            counter += 1
    else:
        for row in raw_sheet.iter_rows(min_row=2):
            if counter <= len(use_value):
                row[0].value = repdata[‘Name‘][counter]
                row[1].value = repdata[‘Up_time_per‘][counter]
                row[2].value = repdata[‘Down_Time_per‘][counter]
                row[3].value = repdata[‘Up_time‘][counter]
                row[4].value = repdata[‘Down_Time‘][counter]
                counter += 1
            else:
                row[0].value = None
                row[1].value = None
                row[2].value = None
                row[3].value = None
                row[4].value = None
                counter += 1
    book.save(target_path)

    return("吉祥如意!\n (Finish) \n original rows in Raw is " +str(count) + "and new rows in Raw is " + str(len(use_value)))

if __name__ == ‘__main__‘:
    root = tk.Tk()
    root.geometry("500x200")
    availability_monthly_report_path = input_path()
    oracle_database_path = input_path()
    pathes = [availability_monthly_report_path, oracle_database_path]
    platform = plat_ui(root, containers=pathes)
    root.mainloop()
    print("§ Finished §")

原文地址:https://www.cnblogs.com/hanani/p/10068451.html

时间: 2024-10-13 08:25:49

帮Customer Architecture写的小脚本的相关文章

如何使用while循环写一个小脚本?

在shell里使用while循环写成这样格式的交互式脚本,a和b都等于一个整数,要求报错有提示: a-b=? a+b=? a*b=? a/b=? a**b=? a%b=? 解:首先我们分析一下题意,输出2个整数的加 减 乘 除 幂 取余的结果,要求不要报错可以理解为只能输入2个整数,ready go! while true #循环一直为真 do read -t 5 -p '请输入2个整数:' a b #用read读ab两个数并提示,5秒未输入即超时 if [[ -z "$b" ]];

Shell进行MySQL表跨服务器增量更新同步小脚本

工作所需写的小脚本. # !/bin/bash # Author : 蛙鳜鸡鹳狸猿# create_ts : 2017年 01月 03日 星期二 14:48:14 CST# program : Incremental transfer table records between MySQL servers# crontab : 11/min# # # __init__ host_src=yourht_A # source db server config listuser_src=rootpsw

使电脑蜂鸣器发声小脚本

平时写点小脚本玩,我希望程序运行结束时,能提醒我一下 第一步:让电脑发出声音 实现方法一:使用c语言实现,见下面代码以  cb.c文件存储,编译成出可执行文件 cb .exe #include<stdio.h> int main() { printf("%c",'\a'); } 注:无限循环printf("%c",'\a')电脑会卡死 实现方法二:使用批操作bat文件,见下面代码以  bb.bat文件存储,方块为震铃符,可能无法显示,复制就行 @echo

写一个php小脚本辅助渗透测试

因为一个注入要爬行一些数据,然后写的一个小脚本,能写脚本来辅助渗透,也算是里程碑.哈哈哈 <?php $num = 1; while ($num <= 39) { $web_url = "http://www.xxx.com/shownews.asp?id=626%0AUNION%0ASELECT%0Atop%0A1%0A1,user_username,3,user_password,5,6%0Afrom%0A(select%0Atop%0A1%0Auser_username,use

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require('fs'); 2 var tel = [ 3 "1/2/4/6/a.tpl.html", 4 "1/2/4/7/9/c.tpl.html", 5 "1/3/5/8/b.tpl.html"]; 6 var demo = function (mulu)

写了一个常规性生成merge 的小脚本

现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随着时间慢慢过,有时候就有一个存储过程,一个xml 来应对整个表的新增,修改,删除的情况了.而对于这个情况,我个人比较喜欢使用 Merge关键字来处理.但是如果表里面的列很多,那么复制黏贴啊之类的机械动作就会很多,而且没有什么价值.所以我就写了一个小脚本,应对了使用xml 来做表的增删改的作用 首先我

邮箱扒头像来告诉你怎么写简单的脚本扒图

用邮箱扒头像来告诉你怎么写简单的脚本扒图 手上有几十万邮箱,本来用户系统没有做头像的东西,现在想根据这些邮箱能拿一部分用户的头像,可以直接使用 gravatar的服务,不过这玩意儿不时会被墙,还是拉回来靠谱,第2个途径是qq邮箱,通过分析数据发现,这几十万 用户里面居然有一半以上是qq邮箱,so 要想办法通过不用oauth的方式拿到. 思路与技术选择 作为一个pythoner,有很多爬虫框架可以选择,例如scrapy pyspider 没错有中文 有ui 有时间调度 爬虫框架会给你做很多事情,基

一个根据内存使用情况重启tomcat的小脚本

有一台服务器上部署了tomcat,随着时间的推移,内存消耗越来越大,所以写了一个小脚本配合crontab定时检测内存,不足的情况下重启tomcat. #!/bin/bash #tomcat restart:out of memory LOG=./restart_tomcat.log TOMCAT=/tomcat/bin/ TOMCATDIR=/tomcat echo"----------------------------" >> $LOG mem_total=$(free

用Python实现一个爬取XX大学电费通知的小脚本

内容简要 1分析网站 2简单爬取 3进阶自定义爬取 4保存进数据库 学校基础设施太差,宿舍电量过低提醒虽然贴在楼下,但是作为低头一族,经常忘记看提醒导致宿舍酣战时突然黑屏,为了避免这种尴尬的场景以及强化PY学习,我决定制作一个简单的爬虫. 首先我通过学校的微信公众号找到了一个十分隐蔽的查低电量提醒网站.它的界面是这样的: 手机适应的页面当然在电脑上会有一些崩=.=,但是不要介意,我们要的是功能.下面是查询到的界面 虽然看起来low而且经常不更新,但是它至少能用.于是我决定用它来制作低电量提醒查询