1) можно ли распараллелить обработку файлов по директориям с помощью библиотеки multiprocessing ? Если можно помогите с примером кода - как это правильно сделать?
Примерно так должно работать, если не напутал. Но нужно будет добавить какое нибудь дополнительное отслеживание прогресса. Например, записывать еще один файл с названиями excel файлов, из которых уже вытащили названия листов. Потому что pool разобьет, и по порядку делать не будет конечно же.
from multiprocessing import Pool
def get_all_files():
files = []
for dir in os.listdir('C:\\Users\Иван Данчук\Documents\Тест_shutil'):
path = f'C:\\Users\Иван Данчук\Documents\Тест_shutil\{dir}'
for file in os.listdir(path):
files.append(os.path.join(path, file))
return files
def get_sheetnames(file_path):
wb = load_workbook(file_path)
with open('sheetnames.txt', 'a', encoding='utf-8') as f:
f.write('\n'.join(wb.sheetnames[0:10])+'\n')
files = get_all_files()
with Pool(5) as p:
p.map(get_sheetnames, files)
2) можно ли этот код оптимизировать для обработки?
Лучше не создавать новый воркбук, записывать в него данные после каждой операции. Либо сместите влево код, чтобы выполнился только один раз, а лучше всего записать в файл, как я делал выше. Все равно я так понял значение не имеет где эти данные лежат. Если нужно имя из каждой папки - тоже можно разбить либо на разные текстовики, либо сделать словарь, куда заносить имена листов.
3) и стоит ли такие масштабные вещи с Excel'ьками проводить в Python? Или лучше в VBA погрузиться для решения подобных задач?
Вообще, у вас очень много файлов. Время все равно придется потратить.