使用Python将Excel文件拆分为多个文件

问题描述 投票:0回答:1

我有一个包含近 40,000 行条目的 Excel 电子表格。我想根据从第 6 行开始的 C 列中的值将此 Excel 文件拆分为多个文件。我已经能够确定如何拆分文件,但我似乎遇到的挑战是将标题行结转。这是 ArchivesSpace 应用程序的特定模板,无论出于何种原因,第 1-5 行中的信息都必须存在。我尝试删除此信息并仅使用域代码,但没有成功。这是我尝试过的代码:

import pandas as pd
import os
import openpyxl

df = pd.read_excel('container_list_master.xlsx')
column_name = 'ead'
unique_values = df[column_name].unique()

for unique_value in unique_values:
    df_output = df[df[column_name].str.contains(unique_value)]
    output_path =os.path.join('output', unique_value + '.xlsx')
    df_output.to_excel(output_path, sheet_name=unique_value, index=False)

python excel split openpyxl
1个回答
0
投票

通过一些细微的修改,您的代码可以适应产生您想要的输出。

为了拥有这一切,您缺少的几个要点:

  • df = pd.read_excel('container_list_master.xlsx', skiprows=range(4))
    该行具有
    skiprows
    参数,它的作用与听起来完全一样,允许您在读取文件时跳过前几行非表格行。
  • df_output.to_excel(output_path, sheet_name=unique_value, startrow=4, index=False)
    startrow
    skiprows
    的概念相同,但写作除外。
  • 创建一个编写器对象,然后使用该编写器对象放入一些标题单元格按照此答案中的建议,如下所示。
import pandas as pd
import os
# import openpyxl

df = pd.read_excel('container_list_master.xlsx', skiprows=range(4))
column_name = 'EAD ID'
unique_values = df[column_name].unique()

for unique_value in unique_values:
    df_output = df[df[column_name].str.contains(unique_value)]
    output_path = os.path.join('output', unique_value + '.xlsx')
    writer = pd.ExcelWriter(output_path)
    df_output.to_excel(writer, sheet_name=unique_value, startrow=4, index=False)
    
    writer.sheets[unique_value].cell(1, 1, 'This is the template for importing ...')
    writer.sheets[unique_value].cell(2, 1, 'Mapping - ArchivesSpace ... SECTION')
    writer.sheets[unique_value].cell(3, 1, 'Mapping - ArchivesSpace ... FIELD')
    writer.sheets[unique_value].cell(4, 1, 'ArchivesSpace field code ...')
    writer.sheets[unique_value].cell(2, 2, 'Resource ...')
    writer.sheets[unique_value].cell(3, 2, 'The resource ...')
    writer.sheets[unique_value].cell(4, 2, 'Collection id ...')
    writer.sheets[unique_value].cell(2, 3, 'Resource ...')
    writer.sheets[unique_value].cell(3, 3, 'EAD ID ...')
    writer.sheets[unique_value].cell(4, 3, 'ead ...')
    writer.sheets[unique_value].cell(4, 4, 'res_uri')
    writer.sheets[unique_value].cell(4, 5, 'ref_id')
    writer.sheets[unique_value].cell(4, 6, 'title')
    writer.sheets[unique_value].cell(4, 7, 'something unique')
    writer.close()

这是我使用的输入,它是屏幕截图的模糊再现:

这是它生成的输出:

输出看起来有点俗气,但如果这只是软件的导入那么谁在乎呢?如果答案是您,那么这里有一个链接,其中包含有关如何格式化它的信息:xlsx writer文档或来自本网站上的另一个优秀答案

如果您有任何疑问,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.