2013-07-22 3 views
2

У меня есть сценарий, который я написал, который читает XML-файл и выводит соответствующие данные в файл TSV. Я конвертирую его, чтобы написать файл XLSX с openpyxl. Всякий раз, когда я сохраняю свою книгу в конце скрипта, она сохраняется в течение 30 секунд при сохранении. Я предполагаю, что это связано с большим объемом данных, которые я пишу (10144 строк в столбце «BG»). Есть ли способ оптимизировать это, чтобы сохранить быстрее или написать непосредственно в файл, пока я его создаю, поэтому ему не нужно сохранять это в конце?Openpyxl зависает при сохранении большого файла

+1

Я принял совет alecxe и переключился на 'xlsxwriter'. Гораздо лучше, чем 'openpyxl'. Просто поместите это здесь, чтобы людям легче было определить решение без необходимости читать комментарии ниже. – PseudoPsyche

ответ

2

Трудно сказать, что именно ваша проблема, но первая вещь, которую вы должны попробовать это использовать openpyxl optimized writer:

from openpyxl import Workbook 
wb = Workbook(optimized_write = True) 

ws = wb.create_sheet() 

# now we'll fill it with 10k rows x 200 columns 
for irow in xrange(10000): 
    ws.append(['%d' % i for i in xrange(200)]) 

wb.save('new_big_file.xlsx') # don't forget to save! 

Кроме того, рассмотреть вопрос о переходе на xlsxwriter в constant_memory режиме (см docs).

Надеюсь, что это поможет.

+0

Ничего себе, 'optimized_write' фактически сократил это примерно до 3 секунд, чтобы сохранить. Я также посмотрю на xlsxwriter. Есть ли какие-либо другие преимущества для xlsxwriter над openpyxl, которые гарантировали бы переключатель? – PseudoPsyche

+0

Поцарапать это. Результирующий файл XLSX составляет всего 6 килобайт и пуст. – PseudoPsyche

+0

Короче говоря, 'xlsxwriter' имеет больше возможностей управления и функций. Однако не уверен в скорости. – alecxe

Смежные вопросы