使用熊猫从Excel转换为CSV,我有多个可能的Excel工作表名称

时间:2019-07-09 17:55:04

标签: python excel pandas csv

我正在尝试使用Python将大量Excel文档转换为CSV,从每个文档转换的工作表可以称为“枢轴”,“ PVT”,“枢轴”或“ pvt”。我现在正在做的事情似乎正在起作用,但是我想知道是否有任何更快的方法,因为这需要很长时间才能浏览我的Excel文件。有没有一种方法可以使用OR运算符指定工作表名称的多个变体来完成one pd.read_excel行中的所有操作?

for f in glob.glob("../Test/Drawsheet*.xlsx"):
    try:
        data_xlsx = pd.read_excel(f, 'PVT', index_col=None)
    except:
        try:
            data_xlsx = pd.read_excel(f, 'pvt', index_col=None)
        except:
            try:
                data_xlsx = pd.read_excel(f, 'pivot', index_col=None)
            except:
                try:
                    data_xlsx = pd.read_excel(f, 'Pivot', index_col=None)
                except:
                    continue
    data_xlsx.to_csv('csvfile' + str(counter) + '.csv', encoding='utf-8')
    counter += 1

1 个答案:

答案 0 :(得分:0)

您的问题不仅仅在于为pd.read_excel找到正确的特殊语法,而是要知道从哪一页读取。 Pandas有一个ExcelFile封装并包含有关Excel文件的一些基本信息。该类具有sheet_names属性,该属性告诉您文件中包含哪些表。 (不幸的是,在这个课程上很难找到文档,所以我不能给您链接)

valid_sheet_names = ['PVT', 'pvt', 'pivot', 'Pivot']

for f in glob.iglob('../Test/Drawsheet*.xlsx'):
    file = pd.ExcelFile(f)
    sheet_name = None

    for name in file.sheet_names:
        if name in valid_sheet_names:
            sheet_name = name
            break

    if sheet_name is None:
        continue

    data_xlsx = pd.read_excel(f, sheet_name, index_col=None)
    ...

但是,这并不严格等同于您的代码,因为它不做两件事:

  • 级联read_excel,如果所选工作表未能加载到数据框中
  • 对工作表名称具有优先级排序(首先是PVT,然后是pvt,然后是pivot,等等)

我将让您按照程序要求来处理这两个问题。