Удалите несколько столбцов одновременно в Python 3 с помощью Openpyxl - PullRequest
0 голосов
/ 30 ноября 2018

После загрузки файла я пытаюсь удалить 2 столбца, но каждый раз, когда удаляю 1 столбец, индекс следующего столбца я пытаюсь удалить изменения, поэтому я должен использовать индекс-1.Нет проблем, если это только 2 столбца, но если мне нужно удалить несколько столбцов, как я могу сделать все это одновременно?

for file in files:
fileName = os.path.splitext(file)[0]
if fileName == 'Any file name':
    wb = load_workbook(file)
    sheet = wb.active
    # Delete the first 3 rows
    sheet.delete_rows(1, 3)
    # Delete Column G
    sheet.delete_cols(7)
    # Delete Column L
    sheet.delete_cols(12)
    workbook.save(file)

Должен ли я использовать что-то другое, например numpy, или работать со всем, используя DataFrames?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вместо этого вы можете удалить значения, начиная с самого правого индекса.Например, чтобы удалить 0-й, 1-й и 2-й индексы из списка:

>>> x = [0,1,2,3,4,5,6]
>>> del x[2]
>>> del x[1]
>>> del x[0]
>>> x
[3, 4, 5, 6]

Сравните этот результат с вашим методом, который удаляет слева направо:

>>> x = [0,1,2,3,4,5,6]
>>> del x[0]
>>> del x[1]
>>> del x[2]
>>> x
[1, 3, 5, 6]
0 голосов
/ 30 ноября 2018

Если зависимость не слишком большая, я бы порекомендовал использовать для этого панд.В Pandas есть функция read_excel, которая использует Openpyxl под капотом, а работа с Pandas DataFrames, как правило, эргономична, и есть гораздо больше ресурсов онлайн (и ответы на вопросы о переполнении стека) для большинства проблем, с которыми вы можете столкнуться.

import pandas as pd

for file in files:
    fileName = os.path.splitext(file)[0]
    if fileName == 'Any file name':
        df = pd.read_excel(file)

        # Delete the first 3 rows
        df = df.drop([0, 1, 2], axis = 0)
        df = df.drop([7, 12])
        # Or if your excel file is labeled
        # df = df.drop(["G", "L"])
        df.write_excel(fileName)
...