У меня есть очень простой фрагмент кода, где у меня есть группа имен файлов, и мне нужно открыть каждое из них и извлечь некоторые данные для последующей обработки.
for file in unique_file_names[1:]:
file_name = rootdir + "/" + str(file)
test_time = time.clock()
try:
wb_loop = load_workbook(file_name, read_only=True, data_only=True)
ws_loop = wb_loop["SHEET1"]
df = pd.DataFrame(ws_loop.values)
print("Opening Workbook: ", time.clock()-test_time)
newarray = np.vstack((newarray, df.loc[4:43,:13].values))
print("Data Manipulation: ", time.clock()-test_time)
Итак, я попробовал несколько различных модулей для чтения в файлах Excel, в том числе непосредственно с помощью pandas.read_excel (), и это оптимальный метод, позволяющий получить время, чтобы открыть книгу до 1,5-2 с. укладка занимает 0,03 секунды.
Я думаю, что размещение данных в третьем измерении в массиве на основе индекса, вероятно, будет быстрее, но я больше сосредоточен на ускорении загрузки электронных таблиц, какие-либо предложения?
Редактировать: я также создал многопоточный пул, чтобы попытаться ускорить это, но по какой-то причине он начал использовать оперативную память 15 Гб и сломал мой компьютер
Редактировать 2:
Итак, самый быстрый способ сделать это - использовать xlrd в соответствии с рекомендацией принятых ответов. Я также понял, что быстрее удалить рабочую книгу в конце цикла. Окончательный код выглядит как
for file in unique_file_names[1:]:
file_name = rootdir + "/" + str(file)
test_time = time.clock()
try:
wb_loop = xlrd.open_workbook(file_name, on_demand = True)
ws_loop = wb_loop.sheet_by_name("Sheet1")
print("Opening Workbook: ", time.clock()-test_time)
df = pd.DataFrame([ws_loop.row_values(n) for n in range(ws_loop.nrows)])
newarray = np.vstack((newarray, df.loc[4:43,:13].values))
del wb_loop
print("Data Manipulation: ", time.clock()-test_time)
except:
pass
counter+=1
print("%s %% Done" %(counter*100/len(unique_file_names)))
wb_new = xlwt.Workbook()
ws_new = wb_new.add_sheet("Test")
ws_new.write(newarray)
wb_new.save(r"C:Libraries/Documents/NewOutput.xls")
Это выводит среднее время за цикл 1,6-1,8 с. Спасибо всем за помощь.