ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python办公自动化(一)

2020-12-11 21:58:43  阅读:451  来源: 互联网

标签:办公自动化 python gao input chang data kuan row


这个是一个Python办公自动化小程序,
目的:某个物体有三个度量值,分别是长、宽、高。现有多个物体的长宽高已知,并作为模具使用。现在欲使用已有的模具制作新的样品,查询已有的模具中最接近样品的尺寸。
要求如下:样品尺寸低于模具尺寸,查询的结果按照差距从小到大的顺序排列。

现有的模具尺寸如下:

在这里插入图片描述
输入数据要求:长宽高的数据必须从大到小,方便后续计算。因为大小不一需要多次对比。
最终程序功能:

  1. 实现查询功能;给出样品尺寸,在现有模具中查询最合适的数值。
  2. 实现增删数据功能,查出的模型数据删除掉并可以增加新的模具数值
    想要实现这两种功能,需要使用pandas模块,
    第一步,引入模块:
import pandas as pd
import warnings
warnings.filterwarnings('ignore') #去除无效警告

第二步:实现查询功能,这是程序的主要功能

def search():
    chang = int(input('长'))  #手动输入需要查询的样品尺寸。
    kuan = int(input('宽'))
    gao = int(input('高'))
    df = pd.DataFrame()
    for i in range(len(data)):    #查询数据并判断最近数据
        data_row = data.loc[i].T
        if data_row[1] >= chang:
            chang_ = (data_row[1] - chang)^2
            if data_row[2] >= kuan:
                kuan_ = (data_row[2] - kuan)^2
                if data_row[3] >= gao:
                    gao_ = (data_row[3] - gao)^2
                    sum = chang_ + kuan_ + gao_
                    data_row.loc['衡量'] = sum
                    df = pd.concat([df, data_row], axis=1)
    order = ['编号', '长', '宽', '高', '衡量']  # 防止写入csv时顺序混乱
    df = df.T[order].sort_values('衡量').drop('衡量', 1)  # 一定要注意倒置
    df.to_csv(str(chang) + '-' + str(kuan) + '-' + str(gao) + '输出结果.csv', index=None, encoding='gb18030') #写入独立的csv文件,得到查询结果

循环的主要作用是判断样品数值小于模具数值,且是长宽高一一对应,一一对应主要解决差距问题,可能不是最严谨的方式,但是是最方便的判断方式,并且sum = chang_ + kuan_ + gao_是判断模具和样品尺寸的主要方式,chang_/kaun_/gao_主要用于判断长宽高之间的差值,sum判断两个器件之间的差距,差距越小,说明两个器件越相似

第二步:删除数据

            data = data.set_index('编号')   # 方便删除数据
            number = input('请输入选择的物料编号:')
            if number not in data.index:
                print('输入错误,返回上一层')
            else:
                data = data.drop(number)  # 删除索引所在行
                order = ['长', '宽', '高']  #索引为编号,所以少了一个
                data = data[order]
                data.to_csv('数据.csv', encoding='gb18030')  # 写入索引
                print(data)

第三步:增加数据

 			number1 = input('编号')  # 添加新模具的编号
            if number1 in data['编号'].to_list():  # 判断编号是否存在,不能出现相同的编号
                print('此编号已存在,返回上一层')
            else:   #  不存在则输入新的长宽高数据
                chang = int(input('长'))
                kuan = int(input('宽'))
                gao = int(input('高'))
                dict1 = {
                    '编号': [number1],
                    '长': [chang],
                    '宽': [kuan],
                    '高': [gao]
                }
                df1 = pd.DataFrame(dict1)   # DataFrame文件方便存储及添加
                data = pd.concat([data, df1])  #  默认按列合并
                order = ['编号', '长', '宽', '高']
                data = data[order]
                data.to_csv('数据.csv', index=None, encoding='gb18030') # 注意文件名问题,必须一致,用于更新数据
                print(data)

DataFrame文件方便存储及添加数据,故常用。

完整代码


import pandas as pd
import warnings
warnings.filterwarnings('ignore')

def search():
    chang = int(input('长'))
    kuan = int(input('宽'))
    gao = int(input('高'))
    df = pd.DataFrame()
    for i in range(len(data)):    #查询数据并判断最近数据
        data_row = data.loc[i].T
        if data_row[1] >= chang:
            chang_ = (data_row[1] - chang)^2
            if data_row[2] >= kuan:
                kuan_ = (data_row[2] - kuan)^2
                if data_row[3] >= gao:
                    gao_ = (data_row[3] - gao)^2
                    sum = chang_ + kuan_ + gao_
                    data_row.loc['衡量'] = sum
                    df = pd.concat([df, data_row], axis=1)
    order = ['编号', '长', '宽', '高', '衡量']
    df = df.T[order].sort_values('衡量').drop('衡量', 1)
    df.to_csv(str(chang) + '-' + str(kuan) + '-' + str(gao) + '输出结果.csv', index=None, encoding='gb18030')

if __name__ == '__main__':
    a = 5  # 为保证整个过程中一直可以运行程序,设值用于判断循环进行
    print('*'*50)
    print('请务必根据提示输入,物料的长宽高务必按照由大到小的顺序')
    print('*'*50)
    while a:
        data = pd.read_csv('数据.csv', encoding='gb18030')  # 读取模块数据
        need = int(input('查询数据请按1,删除数据请按2,添加数据请按3:'))  #  三个功能独立使用
        if need == 1:
            data = data.reset_index(drop=True)  # 方便loc的使用
            search()
            print(data)
        elif need == 2:
            data = data.set_index('编号')   # 方便删除数据
            number = input('请输入选择的物料编号:')
            if number not in data.index:
                print('输入错误,返回上一层')
            else:
                data = data.drop(number)
                order = ['长', '宽', '高']
                data = data[order]
                data.to_csv('数据.csv', encoding='gb18030')
                print(data)
        elif need == 3:
            number1 = input('编号')
            if number1 in data['编号'].to_list():
                print('此编号已存在,返回上一层')
            else:
                chang = int(input('长'))
                kuan = int(input('宽'))
                gao = int(input('高'))
                dict1 = {
                    '编号': [number1],
                    '长': [chang],
                    '宽': [kuan],
                    '高': [gao]
                }
                df1 = pd.DataFrame(dict1)
                data = pd.concat([data, df1])
                order = ['编号', '长', '宽', '高']
                data = data[order]
                data.to_csv('数据.csv', index=None, encoding='gb18030')
                print(data)
        a = int(input('结束请按0,继续按1'))  # 判断循环是否进行

标签:办公自动化,python,gao,input,chang,data,kuan,row
来源: https://blog.csdn.net/linker6619/article/details/111053497

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有