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

这篇具有很好参考价值的文章主要介绍了面向chatgpt编程——编写简单的数据录入工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

最终代码如下:

import tkinter as tk
from tkinter import ttk
import cx_Oracle
import re


class TableEditor:
    def __init__(self, db_config):
        self.db_config = db_config
        self.root = tk.Tk()
        self.root.title("Table Editor")
        self.root.state('zoomed')
        self.root.configure(bg="#f0f0f0")

        # Create a Canvas widget
        canvas = tk.Canvas(self.root, bg="#f0f0f0")
        canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=10, pady=10)

        # Create a Scrollbar widget
        scrollbar = 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 widget
        canvas.configure(yscrollcommand=scrollbar.set)

        # Create a Frame widget inside the Canvas widget
        self.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 scrollbar
        self.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 database
        column_names, comments, usage_find, usage_find_hk = self.get_column_names_from_db()

        # Create table header
        tk.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 data
        self.column0_data = usage_find_hk
        self.column1_data = usage_find
        self.column2_data = comments
        self.column3_data = column_names
        self.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 database
        with cx_Oracle.connect(**self.db_config) as conn:
            with conn.cursor() as cursor:
                # Replace 'table_name' with the actual name of your table
                cursor.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_hk

    def update_db(self):
        # Connect to Oracle database
        with 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 column
                for i, value in enumerate(self.column3_data):
                    if not self.column4_data[i]: continue
                    comp_index = self.column3_data.index('COMPNAME')
                    enddate_index = self.column3_data.index('ENDDATE')
                    if i == comp_index or i == enddate_index: continue
                    sql = 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 e
                conn.commit()
        # 关闭窗口
        self.root.destroy()

    def get_column4_data_from_db(self):
        # Connect to Oracle database
        with 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 column
                comp_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_data

    def synchronize_db(self):
        cur_data = self.get_column4_data_from_db()
        for i, value in enumerate(cur_data):
            if not value: continue
            var = 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] = value

    def transform_data(self):
        cur_data = self.column4_data
        for i, value in enumerate(cur_data):
            if not value: continue
            if 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 e
                    var = 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_value


if __name__ == '__main__':
    # Replace 'username', 'password', and 'host:port/service_name' with the actual values for your Oracle database
    db_config = {'user': 'xbookadmin', 'password': 'mypwd', 'dsn': 'host:port/ORCL'}
    table_editor = TableEditor(db_config)

代码的运行结果如图:
面向chatgpt编程——编写简单的数据录入工具,面向chatgpt编程,数据库,python,ui文章来源地址https://www.toymoban.com/news/detail-724488.html

到了这里,关于面向chatgpt编程——编写简单的数据录入工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle SQL Developer 中查看表的数据和字段属性、录入数据

    在Oracle SQL Developer中,选中一个表时,右侧会列出表的情况;第一个tab是字段的名称、数据类型等属性; 切换到第二个tab,显示表的数据;   这和sql server management studio不一样的; 看一下部门表dept的数据如下;   输入语句新建一个表; 切换到新建表的数据tab, 通过点上方图

    2024年02月07日
    浏览(44)
  • 软件机器人助力交通运输局数据录入,实现高效管理

    随着科技的迅速发展,许多传统的行业正在寻求通过科技创新优化工作流程、提升效率。在这样的大背景下,交通运输部门也开始注重引入科技手段改善工作流程。博为小帮软件机器人正逐步改变着交通运输局的工作方式。 软件机器人:交通管理的利器 博为小帮软件机器人

    2024年02月11日
    浏览(56)
  • 第二章 02Java基础-数据类型、标识符、键盘录入

    今天我们学习Java基础,数据类型、标识符、键盘录入 1.数据类型大体上可以分为两类,一类是基本数据类型,另外一类是引用数据类型。今天我们学习基本数据类型。 2.基本数据类型可以分为四类八种,整数(byte short int long)、浮点数(float double)、字符(char)和布尔(

    2024年02月06日
    浏览(55)
  • 前端做excel的录入解析,将excel的数据传给后端,显示在页面上。

    具体的流程如图所示: 1.点击excel录入按钮  2.打开弹框  3.点击上传按钮,会自动打开计算机本地文件,选择想上传的文件,点击打开  4.会将excel的数据解析成一个表格,可以在表格中做删除操作,点击确定  5.将excel的人员与系统中的人员做一个对比,若不在系统中,则无

    2024年02月16日
    浏览(49)
  • 面向百度编程与面向chatGPT编程

    面向百度编程 是一种编程方式,它的核心思想是:在编写代码的过程中,要将百度的搜索结果作为一种重要的参考,以帮助解决编程中的问题。 具体来说,面向百度编程包括以下几个方面: 在编写代码之前,先通过搜索引擎(如百度)查询相关的问题和解决方案,了解已有

    2023年04月21日
    浏览(44)
  • [Cursor Tool] 面向编程的ChatGPT工具的入门使用指南

    引子: 众所周知,随着 ChatGPT 4 的正式推出,人工智能(AI)领域掀起了一波新的高潮,各种基于 ChatGPT 的应用纷纷涌现。 继AI绘画,AI创作等领域之后,人工智能的发展,也朝着发展人工智能的领域—— IT领域 ,蔓延而去。 在IT界, 让AI写代码 一只是程序员们所追求的酷事

    2024年02月02日
    浏览(63)
  • Java 编程实战:如何用 Java 编写一个简单而强大的 Tomcat

    学习完了JavaWeb,为了深入了解tomcat,打算手撕tomcat搭建自己的tomcat,希望对来访小伙伴也有帮助         Tomcat 是一个开源的 Web 服务器和 Servlet 容器,它可以提供动态 Web 内容的处理和交互功能。Tomcat 是用 Java 语言编写的,需要运行在 Java 虚拟机上,所以它可以跨平台运

    2024年02月14日
    浏览(38)
  • chatgpt赋能python:Python简单小游戏制作教程——让你学会编写游戏代码

    Python是一种高级编程语言,越来越受欢迎,因为它易于学习和使用,而且灵活性非常高。在这篇文章中,我们将教你如何用Python编写一个简单的小游戏。让我们开始吧! 在编写代码之前,你需要安装以下工具: Python编程语言 Pygame游戏框架 步骤一:设置游戏场景 首先,你需

    2024年02月11日
    浏览(56)
  • 强推集成GPT-4的编辑器Cursor;面向ChatGPT编程18种方法;如何将AI绘画融合于工作流;ChatGPT SEO公式大揭秘 | ShowMeAI日报

    👀 日报合辑 | 🎡 生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 3月16日,美政府网站 Federal Register 发布了 U.S. Copyright Office (版权局)的一项 🌍 政策声明 ,明确了 AI 作品的审核标准和注册流程,并于2023年3月16日生效。 整体上来说,版权申请的审核标准是: 基本上

    2024年02月01日
    浏览(58)
  • ECS与DOP(面向数据编程)浅析

    以下内容大部分是文字读起来确实会有点繁琐,内容主要是个人对ECS以及DOP的一些理解,如有错误欢迎指出,我觉得如果你正在学习ECS以及DOP,好好地读一下这篇文章是能够给你带来收获的。 DOP(data-oriented programming),也就是面向数据编程,一种编程范式。与面向对象以及面向

    2024年02月01日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包