Python項目源碼57:數據格式轉換工具1.0(csv+json+excel+sqlite3)

1.智能路徑處理:自動識別并修正文件擴展名,根據轉換類型自動建議目標路徑,實時路徑格式驗證,自動補全缺失的文件擴展名。

2.增強型預覽功能:使用pandastable庫實現表格預覽,第三方模塊自己安裝一下,自動加載前10行數據,支持實時預覽更新,自動調整列寬,SQLite表名自動檢測。

pip install pandastable

3.改進的UI交互:分欄式布局(左側控制/右側預覽),自動保存路徑建議,智能表名檢測(SQLite),實時錯誤反饋,一鍵清空預覽。

4.使用說明:選擇轉換類型,瀏覽選擇源文件(自動生成目標路徑建議),查看右側數據預覽確認數據正確性,(數據庫轉換需要輸入/選擇表名),點擊"開始轉換"按鈕
在這里插入圖片描述

# -*- coding: utf-8 -*-
# @Author : 小紅牛
# 微信公眾號:WdPython
import os
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.simpledialog import askstring
import sqlite3
import pandas as pd
from pandastable import Tableclass DataConverterApp:def __init__(self, root):self.root = rootself.root.title("智能數據轉換工具1.0")self.root.geometry("1200x700")# 初始化變量self.source_path = tk.StringVar()self.target_path = tk.StringVar()self.table_name = tk.StringVar()self.conversion_type = tk.StringVar(value="excel2json")# 文件類型映射self.file_extensions = {"excel": ("Excel文件", ".xlsx"),"json": ("JSON文件", ".json"),"csv": ("CSV文件", ".csv"),"sqlite": ("SQLite數據庫", ".db")}# 創建界面self.create_widgets()self.setup_preview_table()def setup_preview_table(self):"""初始化數據預覽表格"""self.preview_frame = ttk.Frame(self.preview_container)self.preview_frame.pack(fill=tk.BOTH, expand=True)self.ptable = Table(self.preview_frame, showtoolbar=False, showstatusbar=True)self.ptable.show()def create_widgets(self):# 主容器main_frame = ttk.Frame(self.root, padding=20)main_frame.pack(fill=tk.BOTH, expand=True)# 左側控制面板control_frame = ttk.Frame(main_frame, width=400)control_frame.pack(side=tk.LEFT, fill=tk.Y)# 右側預覽面板self.preview_container = ttk.LabelFrame(main_frame, text="數據預覽", padding=10)self.preview_container.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)# 轉換類型選擇type_frame = ttk.LabelFrame(control_frame, text="轉換類型", padding=10)type_frame.pack(fill=tk.X, pady=5)conversion_types = [("Excel → JSON", "excel2json"),("JSON → Excel", "json2excel"),("CSV → JSON", "csv2json"),("JSON → CSV", "json2csv"),("SQLite → Excel", "sqlite2excel"),("Excel → SQLite", "excel2sqlite"),("SQLite → CSV", "sqlite2csv"),("CSV → SQLite", "csv2sqlite")]for text, value in conversion_types:rb = ttk.Radiobutton(type_frame, text=text, variable=self.conversion_type,value=value, command=self.update_ui)rb.pack(anchor=tk.W, pady=2)# 源文件設置source_frame = ttk.LabelFrame(control_frame, text="源文件設置", padding=10)source_frame.pack(fill=tk.X, pady=5)ttk.Label(source_frame, text="源文件路徑:").pack(anchor=tk.W)ttk.Entry(source_frame, textvariable=self.source_path, width=50).pack(side=tk.LEFT, fill=tk.X, expand=True)ttk.Button(source_frame, text="瀏覽...", command=self.browse_source).pack(side=tk.RIGHT)# 目標文件設置target_frame = ttk.LabelFrame(control_frame, text="目標設置", padding=10)target_frame.pack(fill=tk.X, pady=5)ttk.Label(target_frame, text="目標路徑:").pack(anchor=tk.W)ttk.Entry(target_frame, textvariable=self.target_path, width=50).pack(side=tk.LEFT, fill=tk.X, expand=True)ttk.Button(target_frame, text="瀏覽...", command=self.browse_target).pack(side=tk.RIGHT)# 數據庫表名設置self.table_frame = ttk.LabelFrame(control_frame, text="數據庫設置", padding=10)ttk.Label(self.table_frame, text="表名:").pack(side=tk.LEFT)ttk.Entry(self.table_frame, textvariable=self.table_name).pack(side=tk.LEFT, fill=tk.X, expand=True)# 操作按鈕btn_frame = ttk.Frame(control_frame)btn_frame.pack(fill=tk.X, pady=10)ttk.Button(btn_frame, text="開始轉換", command=self.start_conversion).pack(side=tk.LEFT, padx=5)ttk.Button(btn_frame, text="清空預覽", command=self.clear_preview).pack(side=tk.LEFT, padx=5)ttk.Button(btn_frame, text="退出", command=self.root.quit).pack(side=tk.RIGHT, padx=5)# 綁定路徑變化事件self.source_path.trace_add("write", self.update_preview)self.table_name.trace_add("write", self.update_preview)self.update_ui()def get_conversion_info(self):"""獲取當前轉換類型信息"""ct = self.conversion_type.get()source_type = ct.split("2")[0]target_type = ct.split("2")[1]return source_type, target_typedef update_ui(self):"""更新界面元素"""source_type, target_type = self.get_conversion_info()# 更新數據庫設置可見性if "sqlite" in self.conversion_type.get():self.table_frame.pack(fill=tk.X, pady=5)else:self.table_frame.pack_forget()# 自動更新目標路徑后綴current_target = self.target_path.get()if current_target:base, _ = os.path.splitext(current_target)new_ext = self.file_extensions[target_type][1]self.target_path.set(f"{base}{new_ext}")def browse_source(self):"""選擇源文件"""source_type, _ = self.get_conversion_info()file_type = self.file_extensions[source_type]path = filedialog.askopenfilename(title="選擇源文件",filetypes=[file_type, ("所有文件", "*.*")])if path:self.source_path.set(path)self.auto_suggest_target_path(path)def auto_suggest_target_path(self, source_path):"""自動生成目標路徑建議"""source_type, target_type = self.get_conversion_info()base = os.path.splitext(source_path)[0]new_ext = self.file_extensions[target_type][1]suggested_path = f"{base}_converted{new_ext}"self.target_path.set(suggested_path)def browse_target(self):"""選擇目標路徑"""_, target_type = self.get_conversion_info()file_type = self.file_extensions[target_type]path = filedialog.asksaveasfilename(title="保存目標文件",defaultextension=file_type[1],filetypes=[file_type, ("所有文件", "*.*")])if path:self.target_path.set(path)def clear_preview(self):"""清空預覽"""self.ptable.clearTable()self.ptable.model.df = pd.DataFrame()self.ptable.redraw()def load_preview_data(self):"""加載預覽數據"""source_path = self.source_path.get()if not source_path:return Nonetry:source_type, _ = self.get_conversion_info()if source_type == "excel":return pd.read_excel(source_path, nrows=10)elif source_type == "csv":return pd.read_csv(source_path, nrows=10)elif source_type == "json":return pd.read_json(source_path).head(10)elif source_type == "sqlite":conn = sqlite3.connect(source_path)table_name = self.table_name.get() or self.detect_table_name(conn)if table_name:return pd.read_sql_query(f"SELECT * FROM {table_name} LIMIT 10", conn)return Noneexcept Exception as e:messagebox.showerror("預覽錯誤", f"無法加載數據: {str(e)}")return Nonedef detect_table_name(self, conn):"""自動檢測數據庫表名"""cursor = conn.cursor()cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")tables = cursor.fetchall()if tables:return askstring("選擇表", "檢測到多個表,請選擇:", initialvalue=tables[0][0])return Nonedef update_preview(self, *args):"""更新數據預覽"""df = self.load_preview_data()if df is not None:self.ptable.model.df = dfself.ptable.redraw()self.ptable.autoResizeColumns()def start_conversion(self):"""執行轉換操作"""source_path = self.source_path.get()target_path = self.target_path.get()conversion_type = self.conversion_type.get()table_name = self.table_name.get()try:# 自動修正目標路徑后綴_, target_type = self.get_conversion_info()target_ext = self.file_extensions[target_type][1]if not target_path.endswith(target_ext):target_path = f"{os.path.splitext(target_path)[0]}{target_ext}"self.target_path.set(target_path)# 執行轉換邏輯if conversion_type == "excel2json":df = pd.read_excel(source_path)df.to_json(target_path, orient='records', indent=4)elif conversion_type == "json2excel":df = pd.read_json(source_path)df.to_excel(target_path, index=False)elif conversion_type == "csv2json":df = pd.read_csv(source_path)df.to_json(target_path, orient='records', indent=4)elif conversion_type == "json2csv":df = pd.read_json(source_path)df.to_csv(target_path, index=False)elif conversion_type == "sqlite2excel":conn = sqlite3.connect(source_path)table_name = table_name or self.detect_table_name(conn)df = pd.read_sql_query(f"SELECT * FROM {table_name}", conn)df.to_excel(target_path, index=False)elif conversion_type == "excel2sqlite":df = pd.read_excel(source_path)conn = sqlite3.connect(target_path)df.to_sql(table_name or "Sheet1", conn, if_exists='replace', index=False)elif conversion_type == "sqlite2csv":conn = sqlite3.connect(source_path)table_name = table_name or self.detect_table_name(conn)df = pd.read_sql_query(f"SELECT * FROM {table_name}", conn)df.to_csv(target_path, index=False)elif conversion_type == "csv2sqlite":df = pd.read_csv(source_path)conn = sqlite3.connect(target_path)df.to_sql(table_name or "CSV_Data", conn, if_exists='replace', index=False)messagebox.showinfo("成功", f"文件已成功保存到:\n{target_path}")self.update_preview()except Exception as e:messagebox.showerror("錯誤", f"轉換失敗: {str(e)}")if __name__ == "__main__":root = tk.Tk()app = DataConverterApp(root)root.mainloop()

完畢!!感謝您的收看

----------★★跳轉到歷史博文集合★★----------
我的零基礎Python教程,Python入門篇 進階篇 視頻教程 Py安裝py項目 Python模塊 Python爬蟲 Json Xpath 正則表達式 Selenium Etree CssGui程序開發 Tkinter Pyqt5 列表元組字典數據可視化 matplotlib 詞云圖 Pyecharts 海龜畫圖 Pandas Bug處理 電腦小知識office自動化辦公 編程工具 NumPy Pygame

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78611.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫MySQL學習——day9(聚合函數與分組數據)

文章目錄 1. 聚合函數1.1 COUNT() 函數1.2 SUM() 函數1.3 AVG() 函數1.4 MIN() 函數1.5 MAX() 函數 2. GROUP BY 子句2.1 使用 GROUP BY 進行數據分組2.2 結合聚合函數 3. HAVING 子句3.1 使用 HAVING 過濾分組數據3.2 HAVING 和 WHERE 的區別 4. 實踐任務4.1 創建一個銷售表4.…

數據管理能力成熟度評估模型(DCMM)全面解析:標準深度剖析與實踐創新

文章目錄 一、DCMM模型的戰略價值與理論基礎1.1 DCMM的本質與戰略定位1.2 DCMM的理論基礎與創新點 二、DCMM模型的系統解構與邏輯分析2.1 八大能力域的有機關聯與系統架構2.2 五級成熟度模型的內在邏輯與演進規律 三、DCMM八大能力域的深度解析與實踐創新3.1 數據戰略&#xff…

Docker搜索鏡像報錯

科學上網最方便。。。。 主要是鏡像的問題 嘗試一: 報錯處理 Error response from daemon: Get https://index.docker.io/v1/search?qmysql&n25: dial tcp 31.13.84.2:443: i/o timeout Error response from daemon: Get https://index.docker.io/v1/se…

ERP系統源碼,java版ERP管理系統源碼,云端ERP

一套開箱即用的云端ERP系統源代碼,小型工廠ERP系統源碼 SaaS ERP是一套開箱即用的云端ERP系統,有演示,開發文檔,數據庫文檔齊全,自主版權落地實例,適合項目二開。 SaaS ERP具有高度的靈活性和可擴展性&am…

Sliding Window Attention(Longformer)

最簡單的自注意力大家肯定都會啦。 但這種全連接的自注意力(即每個 token 需要 attend 到輸入序列中的所有其他 token)計算與內存開銷是 O ( n 2 ) O(n^2) O(n2) 。為了緩解這個問題,研究者們提出了 Sliding Window Attention。 Sliding W…

在Window10 和 Ubuntu 24.04LTS 上 Ollama 在線或離線安裝部署

Ollama 是一個開源的大型語言模型(LLM)服務框架,旨在通過輕量化、跨平臺的設計,簡化大模型在本地環境中的部署與應用。其基于 Go 語言開發,通過 Docker 容器化技術封裝模型運行環境,提供類似命令行工具的交…

在Ubuntu系統中安裝桌面環境

在 Ubuntu 系統中安裝桌面環境可以通過包管理器 apt 或工具 tasksel 實現。以下是詳細的安裝方法和常見桌面環境的選擇: --- ### **1. 準備系統更新** 在安裝前,建議更新軟件源和系統包: bash sudo apt update && sudo apt upgrade…

【云備份】服務端業務處理模塊設計與實現

目錄 一. 業務處理模塊的任務 二. 網絡通信接口設計 2.1.文件上傳 2.2.展示頁面獲取 2.3.文件下載 三.業務處理類設計 3.1.業務處理類的代碼框架編寫 3.2.文件上傳代碼編寫 3.3.展示頁面的獲取代碼編寫 3.4.文件下載代碼編寫——下載篇 3.4.文件下載代碼編寫——斷…

基于SpringBoot的漫畫網站設計與實現

1.1項目研究的背景 困擾管理層的許多問題當中,漫畫信息管理一定是不敢忽視的一塊。但是管理好漫畫網站又面臨很多麻煩需要解決,如何在工作瑣碎,記錄繁多的情況下將漫畫網站的當前情況反應給相關部門決策等等。在此情況下開發一款漫畫網站,于是乎變得非常合乎時宜。…

學習記錄:DAY22

假日尾聲:技術進階與自我反思 前言 于是,假日迎來了它的尾聲,把快樂和焦躁都留存在昨天。 我只覺情感的自相矛盾在加重,學習讓我焦躁,縱欲無法填補空虛,于是我的心被拖入了無止盡的拉扯中。 我還沒有找到必…

Oracle OCP認證考試考點詳解083系列07

題記: 本系列主要講解Oracle OCP認證考試考點(題目),適用于19C/21C,跟著學OCP考試必過。 31. 第31題: 題目 解析及答案: 從 Oracle 19c 開始,數據庫配置助手(DBCA)在克…

專業課復習筆記 4

前言 實際上對于我的考研來說,最重要的兩門就是數學和專業課。所以從今天開始,我盡可能多花時間學習數學和專業課。把里面的知識和邏輯關系理解清楚,把常考的內容練習透徹。就這樣。 尋址方式 立即數尋址 操作數在指令里面直接提供了。 …

Go小技巧易錯點100例(三十)

本期分享: 1.切片共享底層數組 2.獲取Go函數的注釋 切片共享底層數組 在Go語言中,切片和數組是兩種不同的元素,但是切片的底層是數組,并且還有一個比較重要的機制:切片共享底層數組。 下面這段代碼演示了切片&…

反轉字符串2

reverse函數的用法(reverse一般是左閉右開區間): 1.反轉數組: int arr[] {1, 2, 3, 4, 5}; int n sizeof(arr) / sizeof(arr[0]); // 反轉數組arr的全部元素 reverse(arr, arr n); 2.反轉字符串: string str "he…

企業可用免費軟件 | 7-Zip,壓縮率比 WinZip 高10%!

7-Zip是一款出色的文件壓縮和存檔工具,但實際上許多小伙伴們并不了解。它是一款開源的免費軟件,目前支持87種語言,適用于所有系統,軟件操作界面也十分簡潔,大部分代碼都在GNU LGPL許可下。除了免費無廣告的優點之外&am…

Gradio全解20——Streaming:流式傳輸的多模態應用(1)——Mistral-7B實現流式傳輸音頻:魔力8號球

Gradio全解20——Streaming:流式傳輸的多模態應用(1)——Mistral-7B實現流式傳輸音頻:魔力8號球 前言本篇摘要20. Streaming:流式傳輸的多模態應用20.1 Mistral-7B實現流式傳輸音頻:魔力8號球20.1.1 工作原…

Qt實現網頁內嵌

文章目錄 一、環境準備 二、代碼實現 三、測試 一、環境準備 首先,確保你的Qt安裝包含了QtWebEngine模塊。我的Qt是5.12.9并且使用MSVC來編譯項目。在項目文件中需要添加以下配置,其中在Qt中配置MSVC,建議去看看這位大佬的博客&#xff1a…

conda管理python環境

其他文章 服務容錯治理框架resilience4j&sentinel基礎應用---微服務的限流/熔斷/降級解決方案-CSDN博客 conda管理python環境-CSDN博客 快速搭建對象存儲服務 - Minio,并解決臨時地址暴露ip、短鏈接請求改變瀏覽器地址等問題-CSDN博客 大模型LLMs的MCP入門-…

Android工廠模式

前言 工廠模式是創建型模式,使我們常用/常見的模式之一。多用于需要生成復雜對象的地方。用new就可以完成創建的對象就無需使用。工廠模式降低了對象之間的耦合度,由于工廠模式依賴抽象的架構,實例化的任務交由子類去完成,所以有…

【AI面試準備】數據驅動測試思維與實踐指南

面試題:數據驅動思維 構建測試數據集:收集代碼覆蓋率、缺陷歷史等數據。 模型訓練優化:使用Jupyter Notebook分析特征重要性。 數據驅動思維是一種以數據為核心、基于數據分析結果進行決策的方法論。它強調通過量化分析、模式識別和預測建模…