面向chatgpt编程——编写简单的数据录入工具

标题面向chatgpt编程——编写简单的数据录入工具

最近业务上有个需求,需要采集某些公司披露的年度报告中的信息,因为 pdf 解析工具的效果不太理想,因此需要人工查找录入到oracle数据库。为了提高效率,我借助chatgpt搭建了一个小型的录入工具以提高录入速度。

我描述了需求后它给出了模板代码,我一步步测试,它一步步给出优化方案,中间他出现了比较多的语法错误和”伪造参数“,需要人工矫正。

总体感受是,它的知识面很广,利用的好的话可以大大提升造轮子的效率,但是对需求描述比较严格,需要清晰的描述出需求后(包括前因后果细节等等),才能给出符合预期的代码

最终代码如下:

import tkinter as tk
from tkinter import ttk
import cx_Oracle
import reclass TableEditor:def __init__(self, db_config):self.db_config = db_configself.root = tk.Tk()self.root.title("Table Editor")self.root.state('zoomed')self.root.configure(bg="#f0f0f0")# Create a Canvas widgetcanvas = tk.Canvas(self.root, bg="#f0f0f0")canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=10, pady=10)# Create a Scrollbar widgetscrollbar = ttk.Scrollbar(self.root, orient=tk.VERTICAL, command=canvas.yview)scrollbar.pack(side=tk.RIGHT, fill=tk.Y, padx=10, pady=10)# Configure the Canvas widget to use the Scrollbar widgetcanvas.configure(yscrollcommand=scrollbar.set)# Create a Frame widget inside the Canvas widgetself.table_frame = tk.Frame(canvas)self.table_frame.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox('all')))canvas.create_window((0, 0), window=self.table_frame, anchor='nw', tags=('self.table_frame',))# bind mousewheel to scrollbarself.root.bind('<MouseWheel>', lambda e: canvas.yview_scroll(int(-1 * (e.delta / 120)), 'units'))self.create_table()self.create_submit_button()self.create_synchronize_button()self.create_transform_button()self.root.mainloop()def create_table(self):# Get column names and comments from the databasecolumn_names, comments, usage_find, usage_find_hk = self.get_column_names_from_db()# Create table headertk.Label(self.table_frame, text="字段来源_港股", bg="#f0f0f0", fg="#333333", font=("黑体", 12)).grid(row=0, column=0)tk.Label(self.table_frame, text="字段来源", bg="#f0f0f0", fg="#333333", font=("黑体", 12)).grid(row=0, column=1)tk.Label(self.table_frame, text="字段注释", bg="#f0f0f0", fg="#333333", font=("黑体", 12)).grid(row=0, column=2)tk.Label(self.table_frame, text="字段", bg="#f0f0f0", fg="#333333", font=("黑体", 12)).grid(row=0, column=3)tk.Label(self.table_frame, text="值(元)", bg="#f0f0f0", fg="#333333", font=("黑体", 12)).grid(row=0, column=4)# Create table dataself.column0_data = usage_find_hkself.column1_data = usage_findself.column2_data = commentsself.column3_data = column_namesself.column4_data = [''] * len(column_names)for i in range(len(self.column3_data)):# 第一列使用 Entry 控件entry_var_1 = tk.StringVar(value=self.column0_data[i])entry = tk.Entry(self.table_frame, textvariable=entry_var_1, state=tk.NORMAL, width=50)entry.grid(row=i + 1, column=0)# 第二列使用 Entry 控件entry_var_2 = tk.StringVar(value=self.column1_data[i])entry = tk.Entry(self.table_frame, textvariable=entry_var_2, state=tk.NORMAL, width=50)entry.grid(row=i + 1, column=1)# 第三列使用 Entry 控件entry_var_3 = tk.StringVar(value=self.column2_data[i])entry = tk.Entry(self.table_frame, textvariable=entry_var_3, state=tk.NORMAL)entry.grid(row=i + 1, column=2)tk.Label(self.table_frame, text=self.column3_data[i]).grid(row=i + 1, column=3)# column4_var = tk.StringVar(value=self.column4_data[i])column4_var = tk.StringVar(value=self.column4_data[i] or "")column4_entry = tk.Entry(self.table_frame, textvariable=column4_var, state=tk.NORMAL, name=f"col4_{i}")column4_entry.grid(row=i + 1, column=4)# 保存输入框的变量,以便在 update_db 中使用column4_var.trace_add('write', lambda name, index, mode, var=column4_var, i=i:self.column4_data.__setitem__(i, var.get()))self.table_frame.grid_rowconfigure(i + 1, minsize=25)def create_submit_button(self):submit_button = tk.Button(self.root, text="Submit", command=self.update_db)submit_button.pack(side=tk.BOTTOM, padx=10, pady=10)def create_synchronize_button(self):submit_button = tk.Button(self.root, text="Synchronize", command=self.synchronize_db)submit_button.pack(side=tk.BOTTOM, padx=10, pady=20)def create_transform_button(self):submit_button = tk.Button(self.root, text="Transform", command=self.transform_data)submit_button.pack(side=tk.BOTTOM, padx=10, pady=100)def get_column_names_from_db(self):# Connect to Oracle databasewith cx_Oracle.connect(**self.db_config) as conn:with conn.cursor() as cursor:# Replace 'table_name' with the actual name of your tablecursor.execute("select A.column_name ,B.comments,C.FIND,C.FIND_HK \from user_tab_columns A,user_col_comments B ,LOOKUP C \where A.Table_Name = B.Table_Name and A.Column_Name = B.Column_Name \and A.Table_Name = 'TPROP' and C.TPROP_COL=A.column_name order by A.COLUMN_ID")sql_data = cursor.fetchall()column_names = [row[0] for row in sql_data]comments = [row[1] for row in sql_data]usage_find = [row[2] for row in sql_data]usage_find_hk = [row[3] for row in sql_data]return column_names, comments, usage_find, usage_find_hkdef update_db(self):# Connect to Oracle databasewith cx_Oracle.connect(**self.db_config) as conn:with conn.cursor() as cursor:# Replace 'table_name' and 'column_name' with the actual names of your table and columnfor i, value in enumerate(self.column3_data):if not self.column4_data[i]: continuecomp_index = self.column3_data.index('COMPNAME')enddate_index = self.column3_data.index('ENDDATE')if i == comp_index or i == enddate_index: continuesql = f"UPDATE TPROP SET {self.column3_data[i]}='{str(self.column4_data[i])}' \WHERE COMPNAME='{str(self.column4_data[comp_index])}'  \AND ENDDATE='{str(self.column4_data[enddate_index])}'"try:cursor.execute(sql)except Exception as e:print(self.column3_data[i], '------>', e)raise econn.commit()# 关闭窗口self.root.destroy()def get_column4_data_from_db(self):# Connect to Oracle databasewith cx_Oracle.connect(**self.db_config) as conn:with conn.cursor() as cursor:# Replace 'table_name' and 'column_name' with the actual names of your table and columncomp_index = self.column3_data.index('COMPNAME')enddate_index = self.column3_data.index('ENDDATE')sql = f"SELECT * FROM TPROP  \WHERE COMPNAME='{str(self.column4_data[comp_index])}'  \AND ENDDATE='{str(self.column4_data[enddate_index])}'"cursor.execute(sql)sql_data = list(cursor.fetchall()[0])return sql_datadef synchronize_db(self):cur_data = self.get_column4_data_from_db()for i, value in enumerate(cur_data):if not value: continuevar = tk.StringVar(value=value)var.set(self.column4_data[i])# 更新表格中的数据column4_entry = self.table_frame.grid_slaves(row=i + 1, column=4)[0]column4_entry.delete(0, tk.END)column4_entry.insert(0, value)self.column4_data[i] = valuedef transform_data(self):cur_data = self.column4_datafor i, value in enumerate(cur_data):if not value: continueif type(value) == str:if self.column3_data[i][0] == 'T':try:new_value = re.sub(r'[^\d\.-]', '', value)except Exception as e:print(self.column3_data[i],i,value)raise evar = tk.StringVar(value=new_value)var.set(self.column4_data[i])# 更新表格中的数据column4_entry = self.table_frame.grid_slaves(row=i + 1, column=4)[0]column4_entry.delete(0, tk.END)column4_entry.insert(0, new_value)self.column4_data[i] = new_valueif __name__ == '__main__':# Replace 'username', 'password', and 'host:port/service_name' with the actual values for your Oracle databasedb_config = {'user': 'xbookadmin', 'password': 'mypwd', 'dsn': 'host:port/ORCL'}table_editor = TableEditor(db_config)

代码的运行结果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatDOC,文档版ChatGPT,可以上传文档并解析,与你的文档对话

引言 ChatDOC是一个基于ChatGPT的文件读取助手&#xff0c;可以 快速从文档中提取&#xff0c;定位和汇总信息 特点 阅读速度更快&#xff0c;学得更好。 – 上传研究论文、书籍、手册等&#xff01;询问有关您的文件的任何信息&#xff0c;并在几秒钟内获得易于理解的答案一…

【RPA进阶】 高级数据操作

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;UiPath &#x1f980;专栏简介&#xff1a;UiPath在传统的RPA&#xff08;Robotic…

ChatGPT会取代RPA?ta自己可不是这么说的!

先说一个AI热知识&#xff1a;ChatGPT 的推出在科技界引发了一场狂潮。 聊天机器人ChatGPT以及其背后的AI大模型GPT&#xff0c;在2023年引爆全球。GPT 全称为 Generative Pre-trained Transformer&#xff0c;是一种使用人工神经网络的深度学习技术&#xff0c;能够使机器像人…

Chatgpt超级写手+RPA采集工具,解决内容创作问题的自动化神器

你是否曾经为了寻找优质内容而感到束手无策&#xff1f;是否曾经因为时间成本高而感到头疼&#xff1f;是否曾经因为原创难度大而心生畏惧&#xff1f; 作为一名内容创作者&#xff0c;你一定会深有体会。如何在这个信息爆炸的时代中找到最优质的内容&#xff0c;是每个内容创作…

10几个国内AI大模型,让你的工作学习效率翻倍!

文章目录 前言1.道和顺ChatIC2.星期五3.文心一言4.讯飞星火认知大模型5.通义千问6.商汤-日日新7.Moss8.ChatGLM9. 360智脑写在最后 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入…

刚刚!商汤版ChatGPT「商量」来了!开放API,基于千亿参数大模型,体验实录在此...

金磊 发自 凹非寺量子位 | 公众号 QbitAI 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&am…

商汤版ChatGPT「商量」来了!开放API,基于千亿参数大模型,体验实录在此【转载】

国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&#xff0c;不仅体现了它是商汤自家“商字…

商汤版ChatGPT,有点牛逼,超预期了

金磊 发自 凹非寺 量子位 | 公众号 QbitAI 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&a…

商汤版ChatGPT来了!基于千亿参数大模型,谈笑风生,有“商”有 “量”!

来源&#xff1a;量子位 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&#xff0c;不仅体现了它是商汤自家“商字…

商汤版ChatGPT发布千亿参数大模型:商量!开放API ,体验实录在此!

来源&#xff1a;量子位 | 公众号 QbitAI 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&am…

商汤版ChatGPT「商量」来了!开放API,基于千亿参数大模型!

编辑 | 量子位 点击下方卡片&#xff0c;关注“自动驾驶之心”公众号 ADAS巨卷干货&#xff0c;即可获取 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。…

商汤加入 ChatGPT 战局,发布“商量”语言大模型!

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 近日&#xff0c;AI 大模型落地的机器人应用赛道上&#xff0c;多了一位新成员——商量&#xff08;SenseChat&#xff09;&#xff0c;它是由商汤科技研发而成&#xff0c;和 ChatGPT 有些类似&#x…

商汤版 ChatGPT 正式发布

点击“开发者技术前线”&#xff0c;选择“星标” 让一部分开发者看到未 来源&#xff1a;量子位 | 公众号 QbitAI 国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&…

常用的外贸英语口语汇总

一. 关于询盘&#xff0c;有哪些外贸英语&#xff1a; May I have an idea of your prices? 可以了解一下你们的价格吗&#xff1f; Can you give me an indication of price? 你能给我一个估价吗&#xff1f; Please let us know your lowest possible prices for the …

外贸询盘、对话、常用话术英语(上)

外贸常用话术 1 I’ve come to make sure that your stay in Beijing is a pleasant one. 我特地为你们安排使你们在北京的逗留愉快。 2 You’re going out of your way for us, I believe. 我相信这是对我们的特殊照顾了。 3 It’s just the matter of the schedule,that is,i…

调戏chatGPT(二)下围棋

这次我准备和chatGPT下盘围棋&#xff0c;我先得确认它知道围棋是啥&#xff0c;如果会的话我就不用介绍规则了 t 你会下围棋嘛 作为一名AI助手&#xff0c;我可以模拟下围棋的过程&#xff0c;但是我没有实际的感官&#xff0c;无法看到棋盘和棋子&#xff0c;也无法进行实…

打卡智能中国(三):一位水厂文员的多重身份

跟全国各地、各种岗位的工作者交流过&#xff0c;福建某自来水工厂的小夏&#xff0c;是令我们团队都印象深刻的一个。 这个1997年出生的男孩&#xff0c;用现在流行的话说&#xff0c;一毕业就顺利“上岸”了&#xff0c;回老家成了一名负责党政工作的文员。在“早中晚一天三盅…

亚信科技新“三驾马车”再创佳绩,与数字经济同频共振

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近日&#xff0c;亚信科技公布了2022年财报。财报显示&#xff0c;2022年&#xff0c;亚信科技实现营收77.38亿元&#xff0c;同比上升12.2%&#xff1b;毛利润29.39亿元&#xff0c;同比上升11.1%&#xff0c;毛利率达38.0…

ChatGPT参加了2023高考数学,它的分数超过你了吗?

前几天&#xff0c;我们让ChatGPT写了高考作文。 有人说写得层次分明、条理清晰&#xff0c;感慨自己幸好早早毕业&#xff0c;不然就要被ChatGPT超过了。 有人则认为ChatGPT写的作文中规中矩、平淡无奇&#xff0c;十分正确但没有什么意义。 今天&#xff0c;我们准备再让Chat…

【Python系列】(二)Pandas常用函数

上一篇介绍了Pandas和Numpy这两个包&#xff0c;个人认为比较常用且方便的是Pandas&#xff0c;因此代码第一篇对Pandas的常用函数做一些介绍。 做简单的数据分析用Jupyter Notebook非常方便&#xff0c;利用写这篇文章正好也做一些整理&#xff0c;避免每次都去翻一大堆ipynb…