Python脚本实现xls(xlsx)转成csv的方法与代码示例

温以宁
温以宁
发布时间:2026-10-12| 4人浏览过
原创

本文详细介绍如何使用Python脚本将Excel文档批量转换为CSV格式。通过分别调用xlrd与openpyxl第三方库,提供命令行一键转换及按工作表自动拆分的两种完整代码实现,涵盖环境配置、参数传入与结果验证,适用于日常数据清洗与跨平台导入场景。

核心功能与环境准备

该脚本主要用于将Excel(xls/xlsx)格式的表格数据提取并写入逗号分隔值(CSV)文件。由于CSV原生不支持复杂格式与多个工作表,脚本会默认处理第一个工作表,或按表名拆分输出。使用前需确保系统中已安装Python环境。

方法一:基础逐行读取转换(基于xlrd)

此方案适合仅需导出单个Sheet内容到控制台的轻量场景。代码直接遍历表格行,将单元格统一转为带双引号的字符串并以逗号连接,便于后续管道重定向保存。

第1步:安装依赖库

打开终端或命令行窗口,执行以下命令安装解析Excel所需的第三方库:

pip install xlrd

目的:获取底层读写Excel二进制结构的接口。注意若需读取旧版.xls文件,建议锁定版本pip install "xlrd<2.0.0"。

第2步:执行转换命令并核对输出

创建脚本文件xls2csv.py,填入以下代码。运行后传入目标文件路径即可在终端查看CSV格式输出:

# -*- coding: utf-8 -*-
import xlrd
import sys

def read_excel(filename):
    workbook = xlrd.open_workbook(filename)
    sheet = workbook.sheet_by_index(0)
    
    for row_idx in range(sheet.nrows):
        rows = sheet.row_values(row_idx)
        def _tostr(cell):
            # 统一转为带引号字符串,防止含逗号时CSV解析错位
            if isinstance(cell, str):
                return '"%s"' % cell.encode('utf8') if hasattr(cell, 'encode') else '"%s"' % cell
            else:
                return '"%s"' % str(cell)
        
        print(','.join([_tostr(cell) for cell in rows]))

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('用法: python xls2csv.py <xls或xlsx文件路径>')
        sys.exit(1)
    filename = sys.argv[1]
    read_excel(filename)

操作入口:终端命令行。重要参数:sys.argv[1]接收文件绝对路径或相对路径。可观察的完成状态:终端逐行打印逗号分隔的内容,可通过> output.csv重定向保存为文件。

方法二:支持多Sheet拆分保存(基于openpyxl)

此方案适合需要保留所有工作表结构,且自动生成独立CSV文件的场景。利用openpyxl直接读取.xlsx结构,逐行写入磁盘,避免内存占用过高。

第1步:安装依赖库

pip install openpyxl

目的:获得对现代Office Open XML格式的只读接口。read_only=True参数可大幅降低大文件解析时的内存消耗。

第2步:运行脚本生成独立CSV文件

创建脚本文件xlsx2csv.py,填入以下代码。运行时脚本会自动计算文件名并输出至当前目录:

# -*- coding: utf-8 -*-
from openpyxl import load_workbook
import csv
import os
import sys

def xlsx2csv(filename):
    try:
        wb = load_workbook(filename=filename, read_only=True, data_only=True)
        for sheet_name in wb.sheetnames:
            # 去除原文件名及表名中的空格,拼接新CSV名称
            base_name = os.path.splitext(os.path.basename(filename.replace(' ', '_')))[0]
            csv_filename = '{}_{}.csv'.format(base_name, sheet_name.replace(' ', '_'))
            
            # 使用utf-8-sig编码写入BOM头,Excel可直接识别中文
            csv_file = open(csv_filename, 'w', newline='', encoding='utf-8-sig')
            csv_writer = csv.writer(csv_file)
            
            sheet_ranges = wb[sheet_name]
            for row in sheet_ranges.rows:
                row_container = []
                for cell in row:
                    val = cell.value
                    # 空值补空字符串,非ASCII文本保持原样,其余转字符串
                    if val is None:
                        row_container.append('')
                    elif isinstance(val, str) and ord(val) > 127:
                        row_container.append(val)
                    else:
                        row_container.append(str(val))
                csv_writer.writerow(row_container)
            csv_file.close()
            print(f'已导出: {csv_filename}')
    except Exception as e:
        print('转换出错:', e)

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('用法: python xlsx2csv.py <xlsx文件路径>')
        sys.exit(1)
    xlsx2csv(sys.argv[1])

操作入口:终端命令行传入路径。重要参数:newline=''防止Windows下产生额外空行,encoding='utf-8-sig'解决记事本打开乱码。可观察的完成状态:终端打印各Sheet的CSV文件路径,同目录下出现对应命名文件。

常见问题排错与兼容性说明

  • 中文乱码或显示为unicode转义:CSV标准未强制规定编码。方法一仅输出至终端,若需用记事本直接打开,推荐改用方法二的utf-8-sig模式;或在Unix/Linux环境下追加管道| iconv -f UTF-8 -t GBK。
  • 脚本提示找不到模块:确认Python版本与pip路径一致。可使用python3 xls2csv.py test.xlsx显式指定解释器。
  • 公式单元格输出结果为错误值:Excel公式保存后可能残留历史结果。两个脚本均已开启data_only=True或直接读取底层值,确保导出的是计算后的最终数字或文本。

总结

以上提供了两套基于Python原生第三方库的Excel转CSV方案。针对简单导出需求,采用xlrd配合标准输出即可快速成型;针对企业级报表或多表拆分场景,使用openpyxl可实现更稳定的文件流式写入与编码兼容。掌握参数传递与编码处理要点,可有效避免数据截断与格式错乱。以上就是Python脚本实现xls(xlsx)转成csv的详细内容,更多关于Python数据处理与自动化办公的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。