当前位置: 首页 > article >正文

使用 python中 pandas 将 Excel 转换为 CSV 文件

在数据处理和分析中,我们经常需要将 Excel 文件转换为 CSV 格式。CSV 文件因其简单、易于处理的特点,广泛用于数据交换。本文将介绍如何使用 wxPython 创建一个简单的图形用户界面(GUI),结合 pandas 库,实现 Excel 文件到 CSV 文件的转换功能。
C:\pythoncode\new\excel2csv.py

全部代码

import wx
import pandas as pd
import os

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Excel to CSV Converter')
        panel = wx.Panel(self)

        self.file_picker = wx.FilePickerCtrl(panel, message="Select an Excel file", wildcard="Excel files (*.xlsx)|*.xlsx")
        self.line_count_label = wx.StaticText(panel, label='Number of rows to convert:')
        self.line_count_text = wx.TextCtrl(panel, value='0')
        self.convert_button = wx.Button(panel, label='Convert to CSV')
        self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.file_picker, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.line_count_label, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.line_count_text, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.convert_button, 0, wx.ALL | wx.CENTER, 5)

        panel.SetSizer(sizer)
        self.Show()

    def on_convert(self, event):
        xlsx_path = self.file_picker.GetPath()
        if not xlsx_path:
            wx.MessageBox("Please select an Excel file.", "Error", wx.OK | wx.ICON_ERROR)
            return

        # 获取用户输入的行数
        try:
            row_count = int(self.line_count_text.GetValue())
        except ValueError:
            wx.MessageBox("Please enter a valid number.", "Error", wx.OK | wx.ICON_ERROR)
            return

        # 确定输出的CSV文件路径
        csv_path = os.path.splitext(xlsx_path)[0] + '.csv'

        try:
            # 读取Excel文件并转换为CSV,限制转换的行数
            df = pd.read_excel(xlsx_path)
            if row_count > 0:
                df = df.head(row_count)  # 只选择前 row_count 行
            df.to_csv(csv_path, index=False)
            wx.MessageBox(f"Converted to {csv_path}", "Success", wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox(f"Failed to convert: {str(e)}", "Error", wx.OK | wx.ICON_ERROR)

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

环境准备

在开始之前,请确保你已安装以下库:

pip install wxPython pandas openpyxl
  • wxPython 用于创建 GUI。
  • pandas 用于处理 Excel 和 CSV 文件。
  • openpyxlpandas 处理 Excel 文件的依赖。

创建 wxPython 应用程序

我们将创建一个简单的应用程序,允许用户选择一个 Excel 文件,并输入想要转换的行数。以下是完整的代码示例:

import wx
import pandas as pd
import os

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Excel to CSV Converter')
        panel = wx.Panel(self)

        self.file_picker = wx.FilePickerCtrl(panel, message="Select an Excel file", wildcard="Excel files (*.xlsx)|*.xlsx")
        self.line_count_label = wx.StaticText(panel, label='Number of rows to convert:')
        self.line_count_text = wx.TextCtrl(panel, value='0')
        self.convert_button = wx.Button(panel, label='Convert to CSV')
        self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.file_picker, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.line_count_label, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.line_count_text, 0, wx.ALL | wx.EXPAND, 5)
        sizer.Add(self.convert_button, 0, wx.ALL | wx.CENTER, 5)

        panel.SetSizer(sizer)
        self.Show()

    def on_convert(self, event):
        xlsx_path = self.file_picker.GetPath()
        if not xlsx_path:
            wx.MessageBox("Please select an Excel file.", "Error", wx.OK | wx.ICON_ERROR)
            return

        # 获取用户输入的行数
        try:
            row_count = int(self.line_count_text.GetValue())
        except ValueError:
            wx.MessageBox("Please enter a valid number.", "Error", wx.OK | wx.ICON_ERROR)
            return

        # 确定输出的CSV文件路径
        csv_path = os.path.splitext(xlsx_path)[0] + '.csv'

        try:
            # 读取Excel文件并转换为CSV,限制转换的行数
            df = pd.read_excel(xlsx_path)
            if row_count > 0:
                df = df.head(row_count)  # 只选择前 row_count 行
            df.to_csv(csv_path, index=False)
            wx.MessageBox(f"Converted to {csv_path}", "Success", wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox(f"Failed to convert: {str(e)}", "Error", wx.OK | wx.ICON_ERROR)

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

代码解析

  1. 创建主窗口:我们通过继承 wx.Frame 创建了一个基本窗口,并在其中添加了文件选择器和输入框。

  2. 文件选择器:使用 wx.FilePickerCtrl 让用户选择 Excel 文件。

  3. 行数输入:用户可以输入希望转换的行数。我们使用 wx.TextCtrl 来获取这个值。

  4. 转换逻辑:当用户点击转换按钮时,程序会读取 Excel 文件并提取指定行数的数据,然后将其保存为 CSV 文件。

  5. 错误处理:使用 try-except 块来处理可能出现的错误,并使用 wx.MessageBox 提供反馈。

如何运行

将上述代码保存为 Python 文件(如 excel_to_csv.py),并在命令行中运行:

python excel_to_csv.py

运行后,将出现一个窗口,您可以选择一个 Excel 文件,输入想要转换的行数,然后点击转换按钮。程序将生成一个同名的 CSV 文件。

运行结果

在这里插入图片描述

总结

通过这篇文章,我们实现了一个简单的图形用户界面应用程序,允许用户方便地将 Excel 文件转换为 CSV 格式。这个应用程序展示了 wxPythonpandas 的强大功能,是数据处理工具箱中的一个有用工具。

希望这个项目能够帮助你更好地理解数据转换的过程,并激励你进行更多的编程实践!


http://www.kler.cn/a/374765.html

相关文章:

  • LabVIEW实现NB-IoT通信
  • 预览和下载 (pc和微信小程序)
  • 嵌入式设备常用性能和内存调试指令
  • 谷歌浏览器的网络连接问题解决方案
  • Spring常见面试题总结
  • 对文件内的文件名生成目录,方便查阅
  • 无人机3D模拟训练飞行技术详解
  • springboot导出pdf,解决中文问题
  • 在 Android 设备上部署一个 LLM(大语言模型)并通过 Binder 通信提供服务
  • Java 字符流详解
  • Zoho Desk系统解锁工单自动化 分配效率翻倍
  • ffmpeg拉流分段存储到文件-笔记
  • SC5120家庭总线收发器可pin to pin兼容MAX22088
  • WAF+AI结合,雷池社区版的强大防守能力
  • scp免密传输教程
  • QT 跨平台优势独特,效果实例设计精彩呈现
  • 【Redis】内存淘汰策略
  • sqoop Oracle to hive出现 Error Msg = ORA-00933: SQL 命令未正确结束
  • 3周岁孤独症儿童:治愈的希望还是幻想?
  • 一文读懂 HTTP Cookies
  • Python批量查找包含多个关键词的PDF文件
  • CSP/信奥赛C++刷题训练:经典差分例题(2):洛谷P9904 :Mieszanie kolorów
  • TS:如何推导函数类型
  • 探索Unity:从游戏引擎到元宇宙体验,聚焦内容创作
  • 双十一大促有哪些值得入手的产品?这五款产品实用又划算!
  • Three.js 粒子系统教程构建炫酷的 3D 粒子效果