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

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

C:\pythoncode\new\excel2csv.py

全部代码

python 复制代码
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()

环境准备

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

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

创建 wxPython 应用程序

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

python 复制代码
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),并在命令行中运行:

bash 复制代码
python excel_to_csv.py

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

运行结果

总结

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

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

相关推荐
databook18 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室19 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三20 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户2519162427111 天前
Python之语言特点
python
刘立军1 天前
使用pyHugeGraph查询HugeGraph图数据
python·graphql
数据智能老司机1 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
c8i1 天前
django中的FBV 和 CBV
python·django
c8i1 天前
python中的闭包和装饰器
python
葡萄城技术团队1 天前
从100秒到10秒的性能优化,你真的掌握 Excel 的使用技巧了吗?
excel