Задать вопрос

Почему программа так долго обрабатывает данные?

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

# -*- coding: utf-8 -*-
from docx import Document
doc1 = Document('123.docx')

student = []

print(len(doc1.tables))
print(len(doc1.tables[0].rows))
for i in range(len(doc1.tables[0].rows)):
    student.append(doc1.tables[0].rows[i].cells[0].paragraphs[-1].text)
print(student[1])

python 2.7.10 и python-docx 0.8.5
  • Вопрос задан
  • 844 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Проблема не в циклах, проблема в самом модуле python-docx именно он работает медленно, то как вы к ячейкам обращаетесь в итоге приводит к созданию кучи временных объектов.

так будет значительно быстрее:
student =  [cell.paragraphs[-1].text for cell in doc1.tables[0].column_cells(0)]
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@deliro
Во-первых, что это за ужас?
for i in range(len(doc1.tables[0].rows)):
    student.append(doc1.tables[0].rows[i].cells[0].paragraphs[-1].text)

Замени на:
table = doc1.tables[0]
for row in table.rows:
    student.append(row.cells[0].paragraphs[-1].text)


Во-вторых, насколько долго?
Ответ написан
@lega
python-docx медленный, можете вручную распаковать docx (zip) и работать с данными напрямую (там xml), не удобно, но работать будет быстро.
Ответ написан
Комментировать
@balamut108
Py
Мне кажется будет быстрее через генератор списка: [student.append(doc1.tables[0].v.cells[0].paragraphs[-1].text) for i,v in enumerate((doc1.tables[0].rows))]
Ответ написан
@Dvvarreyn
А обязательно именно docx парсить?
Сохранить в csv и считать c помощью питоносвого csv парсера не будет быстрей?
Ответ написан
Попробуй extend вместо append.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
02 февр. 2025, в 11:35
3000 руб./за проект
02 февр. 2025, в 11:29
1000 руб./за проект
02 февр. 2025, в 10:45
1000 руб./за проект