python办公自动化(一)
作者:互联网
这个是一个Python办公自动化小程序,
目的:某个物体有三个度量值,分别是长、宽、高。现有多个物体的长宽高已知,并作为模具使用。现在欲使用已有的模具制作新的样品,查询已有的模具中最接近样品的尺寸。
要求如下:样品尺寸低于模具尺寸,查询的结果按照差距从小到大的顺序排列。
现有的模具尺寸如下:
输入数据要求:长宽高的数据必须从大到小,方便后续计算。因为大小不一需要多次对比。
最终程序功能:
- 实现查询功能;给出样品尺寸,在现有模具中查询最合适的数值。
- 实现增删数据功能,查出的模型数据删除掉并可以增加新的模具数值
想要实现这两种功能,需要使用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