Использование Pandas для преобразования из Excel в CSV, и у меня есть несколько возможных имен листов Excel - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь преобразовать большое количество документов Excel в CSV с помощью Python, и лист, который я конвертирую из каждого документа, может называться «Pivot», «PVT», «pivot» или «pvt».То, как я сейчас что-то делаю, похоже, работает, но мне было интересно, есть ли какой-нибудь более быстрый способ, так как для просмотра моих файлов Excel требуется много времени.Есть ли способ, которым я могу выполнить одно и то же в строке 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 голосов
/ 09 июля 2019

Ваша проблема не столько в том, чтобы найти правильный специальный синтаксис для 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)
    ...

Однако, это не совсем эквивалентно вашему коду, так как не выполняет 2 вещи:

  • Каскад read_excel, если выбранный лист не загружается в фрейм данных
  • Присвоить приоритет именам листов (например, сначала PVT, затем pvt, затем pivot и т. Д.)

Я расскажу вам, как справиться с этими двумя проблемами, как того требует ваша программа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...