【问题标题】:Split xls file with Python用 Python 分割 xls 文件
【发布时间】:2025-12-28 17:25:12
【问题描述】:

我有一个大的.xls 文件,我想根据第一列将其拆分为多个文件。数据结构有点不确定,这使其复杂化了很多。

基本上,我需要为以“问题”开头的每一行创建一个单独的文件(见下文)。选项的数量是可变的,所以我不能使用块大小。

有什么方法可以用 Python 做到这一点吗?我在*上搜索了很多,但我找不到确切的答案。非常感谢任何帮助。

Column A     Column B    Column C
Question 1
Option 1     Info1       Info2
Option 2     Info3
Option 3
Question 2
Option 1
Option 2
Option 3
Option 4
Question 3
Option 1
Option 2
Option 3

【问题讨论】:

    标签: python excel split


    【解决方案1】:

    要让 Python 使用 .xls 文件,您需要使用 xlrdxlwt 之类的东西。以下脚本应该可以帮助您入门:

    from itertools import groupby
    import xlrd
    import xlwt
    
    workbook = xlrd.open_workbook(r"e:\python temp\input.xls")
    sheet = workbook.sheet_by_index(0)
    rows = [sheet.row_values(row, 0) for row in xrange(sheet.nrows)]
    
    for k, g in groupby(rows, lambda x: x[0].startswith('Question')):
        if k:
            question = next(g)
        else:
            wb = xlwt.Workbook()
            ws = wb.add_sheet('Sheet 1')
    
            for colx, value in enumerate(question):
                ws.write(0, colx, value)
    
            for rowx, row in enumerate(g, start=1):
                for colx, value in enumerate(row):
                    ws.write(rowx, colx, value)
    
            wb.save(question[0] + '.xls')
    

    这会打开您的input.xls 并读取其中的所有行。然后它使用groupby 将其拆分为问题和选项。然后根据问题将每一对写入一个新的输出 Excel 文件,例如Question 1.xls

    您可能需要添加输入和输出文件的完整路径。

    这两个库可以在python-excel 网站上找到。

    【讨论】:

    • 效果很好!非常感谢你的帮助。扩展了我对 Python 的理解。确实必须添加完整路径。关于如何基于此拆分还输出 B/C/etc 列的内容的任何建议?
    • 很高兴它成功了。添加额外的列将取决于完整的结构是什么,即是否出现在问题行上?每行不同的数字?您需要编辑问题以包含更好的示例。
    • B 列包含百分比,C 列包含绝对数字。例如:选项 1 10% 55
    • 基本上我想要实现的是根据 A 列中“问题”的出现将整个 xls 文件与所有列分开。这甚至可能吗?提前致谢!
    • 我已对其进行了更新以支持多列。它应该做你现在需要的。
    【解决方案2】:

    您的问题的确切答案需要创建整个代码,这不是 SO 的目标。

    不过,我想说的是,使用 Python 的 csv module 似乎并不复杂。请查看它并编辑您的问题,如果您有进一步的疑问和/或未能达到预期结果的尝试。

    【讨论】: