Чтение нескольких файлов с использованием openpyxl - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть список с несколькими именами файлов

ListOfFiles = ['filename1.xlsm', 'filename2.xlsm',...]

Я хочу загрузить эти файлы в автоматическом режиме. Поэтому я написал следующее:

from openpyxl import load_workbook
for i in LisOfFiles:
    xl = load_workbook(ListOfFiles[i], read_only=True)

Однако я получаю TypeError: list indices must be integers or slices, not str Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вы уже перебираете список. Нет необходимости индексировать его снова:

from openpyxl import load_workbook

for path in ListOfFiles:
    xl = load_workbook(path, read_only=True)

Редактировать

Обратите внимание, что в приведенном выше коде xl перераспределяется каждый раз. Вероятно, это не то, что вам нужно.

Вы можете записать книги в список:

from openpyxl import load_workbook

workbooks = []
for path in ListOfFiles:
    workbooks.append(load_workbook(path, read_only=True))

Это можно сократить, используя понимание списка :

workbooks = [
    load_workbook(path, read_only=True)
    for path in ListOfFiles
]

Если вы хотите иметь возможность обращаться к ним по имени файла, используйте dict comppresion :

workbooks = {
    path: load_workbook(path, read_only=True)
    for path in ListOfFiles
}
0 голосов
/ 06 апреля 2020

Попробуйте напечатать i в for l oop print(i). В основном вы пытаетесь получить доступ к элементу списка со строкой. В первой итерации это означает
i = 'filename1.xlsm', что переводится как
LisOfFiles['filename1.xlsm']

Однако вы можете получить доступ только к элементам списка с номером, т.е. LisOfFiles[0] работает нормально.

Решение состоит в том, чтобы напрямую использовать i в качестве входных данных для load_workbook. Однако следует помнить, что на каждой итерации l oop xl перезаписывается

for i in LisOfFiles: 
    xl = load_workbook(i, read_only= True)
...