Объединить или объединить сотни файлов Excel - PullRequest
1 голос
/ 08 апреля 2019

У меня есть 638 файлов Excel в каталоге размером около 3000 КБ каждый.Я хочу объединить их все вместе, надеюсь, только с использованием Python или командной строки (без другого программного обеспечения или языков программирования).

По сути, это часть более крупного процесса, который включает в себя некоторые простые манипуляции с данными, и я хочувсе это можно сделать, просто запустив один файл Python (или дважды щелкнув командный файл).

Я пробовал варианты приведенного ниже кода - Pandas, openpyxl и xlrd, и они, кажется, примерно одинаковыскорость.Преобразование в CSV, кажется, требует VBA, в которую я не хочу входить.

temp_list=[]
for filename in os.listdir(filepath):
    temp = pd.read_excel(filepath + filename,
                        sheet_name=X, usecols=fields)
    temp_list.append(temp)

Существуют ли более простые решения командной строки для преобразования их в файлы CSV или объединения в один документ Excel?Или это в значительной степени просто использование базовых библиотек для чтения отдельных файлов?

1 Ответ

3 голосов
/ 08 апреля 2019

.xls(x) - это очень (слишком) сложный формат с множеством особенностей и особенностей, накопленных за эти годы, и поэтому его довольно сложно проанализировать. И он никогда не был рассчитан на скорость или большие объемы данных, а скорее на простоту использования для деловых людей.

Таким образом, с вашим количеством файлов лучше всего конвертировать их в .csv или в другой простой для анализа формат (или использовать такой формат для обмена данными в первую очередь) - и желательно, сделать это до вы можете их обработать - например, по прибытии файла.

например. таким образом вы можете сохранить первый лист .xls(x) в .csv с pywin32, используя COM-интерфейс Excel :

import win32com.client
# need the typelib metadata to have Excel-specific constants
x = win32com.client.gencache.EnsureDispatch("Excel.Application")
w = x.Workbooks.Open("<file>")
s = w.Worksheets(1)
s.SaveAs("<file without extension>",win32com.client.constants.xlCSV)
w.Close(False)

Параллельное выполнение этого обычно не будет иметь никакого эффекта, потому что тот же самый процесс сервера будет повторно использоваться . Вы можете принудительно создать разные процессы для каждого пакета в соответствии с Как я могу заставить python (используя win32com) создать новый экземпляр excel? .

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