Python 使用Pandas将Excel转换为CSV,我有多个可能的Excel工作表名称

Python 使用Pandas将Excel转换为CSV,我有多个可能的Excel工作表名称,python,excel,pandas,csv,Python,Excel,Pandas,Csv,我正在尝试使用Python将大量Excel文档转换为CSV,并且我正在从每个文档转换的工作表可以称为“Pivot”、“PVT”、“Pivot”或“PVT”。我现在做一些事情的方式似乎很有效,但我想知道是否有更快的方式,因为这需要很长时间来浏览我的Excel文件。是否有一种方法可以在一个pd中完成相同的事情。使用OR运算符指定工作表名称的多个变体来读取\u excel行 for f in glob.glob("../Test/Drawsheet*.xlsx"): try:

我正在尝试使用Python将大量Excel文档转换为CSV,并且我正在从每个文档转换的工作表可以称为“Pivot”、“PVT”、“Pivot”或“PVT”。我现在做一些事情的方式似乎很有效,但我想知道是否有更快的方式,因为这需要很长时间来浏览我的Excel文件。是否有一种方法可以在
一个pd中完成相同的事情。使用OR运算符指定工作表名称的多个变体来读取\u 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

你的问题不在于为
pd.read\u excel
找到正确的特殊语法,而在于知道从哪个页面读取。Pandas有一个
Excel文件
,它封装了Excel文件和一些基本信息。该类有一个
sheet\u names
属性,告诉您文件中有哪些工作表。(不幸的是,这个类的文档有点难找到,所以我不能给你一个链接)

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

  • 如果所选工作表未能加载到数据框中,则级联
    读取\u excel
  • 对工作表名称进行优先级排序(例如,首先是
    PVT
    ,然后是
    PVT
    ,然后是
    pivot
    ,等等)

我将告诉您如何根据您的程序要求处理这两个问题。

您的问题不在于如何为
pd.read\u excel
找到正确的特殊语法,而在于知道从哪一页读取。Pandas有一个
Excel文件
,它封装了Excel文件和一些基本信息。该类有一个
sheet\u names
属性,告诉您文件中有哪些工作表。(不幸的是,这个类的文档有点难找到,所以我不能给你一个链接)

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

  • 如果所选工作表未能加载到数据框中,则级联
    读取\u excel
  • 对工作表名称进行优先级排序(例如,首先是
    PVT
    ,然后是
    PVT
    ,然后是
    pivot
    ,等等)

我将告诉您如何根据您的程序要求处理这两个问题。

由于您不确定文件名,恐怕没有其他更快的方法。如果按照您的要求使用或运算符还有其他方法,则还需要检查每种可能性一次,以确定哪种方法是正确的,并引发错误(显然,这是没有出路的)对于其他人来说,可能会花费几乎相同的时间,我担心没有其他更快的方法,因为您不确定文件名。如果按照您的要求使用或运算符还有其他方法,则还需要对每种可能性进行一次检查,以确定哪种方法是正确的,并为其他人引发错误(显然,没有解决此问题的方法),并且最终将消耗几乎相同的时间超级有用,非常感谢!在我将所有这些都编译成一个文件之后,您知道如何能够逐行进行并且只保留某些行吗?例如,我有四列,只想保留第四列显示“Expired”的行,而不想保留第四列为空的行。这是基本筛选:
df=df[df['FourthColumn']=='Expired']
非常有用,非常感谢!在我将所有这些都编译成一个文件之后,您知道如何能够逐行进行并且只保留某些行吗?例如,我有四列,只想保留第四列显示为“Expired”的行,而不想保留第四列为空的行。这是基本筛选:
df=df[df['FourthColumn']=='Expired']
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)
    ...