Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 230

Как с помощью Python из файла Word удалить ненужные изображения и таблицы?

31.01.2025, 09:55. Показов 1598. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

После экспорта из PDF в Word (через) в файле остается много не нужных артефактов в тексте:
- бессмысленные части картинок
- пустые таблицы из 1 ячейки

Подскажите как реализовать следующее решение на базе Python и Google Colab:
1. Добавляю файл Word, через кнопку "загрузить".
2. Вывести в интерфейсе миниатюры всех изображений и таблиц (в 1 экземпляре) с галочкой рядом.
3. Снимаю галочки у не нужных изображений и таблиц.
4. Подтверждаю.
5. Из файла Word удаляются изображения и таблицы, с которых я снял галочки.
6. Авто-скачивание файла Word на ПК.

Пример файла Word: https://disk.yandex.ru/i/VQkZzn7LQflE1Q
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2025, 09:55
Ответы с готовыми решениями:

Как скрыть или удалить ненужные столбцы таблицы - отчет Word?
const wdAlignParagraphCenter = 1; wdAlignParagraphLeft = 0; wdAlignParagraphRight = 2; wdLineStyleSingle = 1; var ...

Как удалить ненужные пробелы из файла?
Здравствуйте! вопрос стоит в том, как удалить ненужные пробелы из файла при считывании? вот мой код: private: System::Void...

Удалить все таблицы из файла Word
Подскажите как?: пройдясь по документу удалять таблицы

5
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 309
31.01.2025, 12:12
rownong, а блокнот с добавленным файлом получилось создать? есть ссылка на пример?
0
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 230
31.01.2025, 12:25  [ТС]
Цитата Сообщение от nilske Посмотреть сообщение
а блокнот с добавленным файлом получилось создать?
Какой блокнот, гугл колабы?
Да файл получается добавлять в колабу.

Приложить пример с гугл колабой кодом который есть?
0
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 230
31.01.2025, 21:37  [ТС]
Скрипт для удаление изображений и таблиц из Word
https://colab.research.google.... oKxazRKrbj
Образец файла
https://disk.yandex.ru/i/VQkZzn7LQflE1Q

Таблица выводит в интерфейс.
Изображения и фигуры из word не выводит. Помогите, пожалуйста, найти ошибку. Что поправить?
0
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 230
01.02.2025, 13:49  [ТС]
Сможете подсказать?

Добавлено через 58 минут
Доступ к файлу гугл колаб открыл.
0
 Аватар для ViachaslauK
126 / 185 / 16
Регистрация: 08.10.2024
Сообщений: 689
02.02.2025, 22:23
Цитата Сообщение от rownong Посмотреть сообщение
Сможете подсказать?
Я тебе на серче скидывал класс работы с файлом, под колаб сам адаптируй.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import os
import docx
 
from docx import Document
import ipywidgets as widgets
from IPython.display import display, clear_output
# from google.colab import files
import io
from PIL import Image
from fastapi import Path
from docx.enum.shape import WD_INLINE_SHAPE_TYPE
from docx.text.run import Run
from docx.oxml.ns import qn
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from structlog import get_logger
 
logger = get_logger(__name__)
 
matplotlib.use('Agg')
 
path_str = os.getcwd()
 
 
class WordEditor:
 
    def __init__(self, file):
        self.file = file
        self.document = None
        self.tables = []
        self.images = []
 
    def load_file(self):
        if isinstance(self.file, str):
            with open(self.file, 'rb') as f:
                self.document = Document(f)
        else:
            self.document = Document(io.BytesIO(self.file))
        return self.document
 
    def get_empty_tables(self):
        for i, table in enumerate(self.document.tables):
            if all(not cell.text.strip() for row in table.rows for cell in row.cells):
                self.tables.append(table)
        return self.tables
 
    def get_images(self):
        """Extract images from both inline shapes and shapes in Word document"""
        images = []
 
        try:
            # Handle inline shapes (embedded images)
            for shape in self.document.inline_shapes:
                try:
                    if shape.type == WD_INLINE_SHAPE_TYPE.PICTURE:
                        rId = shape._inline.graphic.graphicData.pic.blipFill.blip.embed
                        image_part = self.document.part.related_parts[rId]
                        if image_part and hasattr(image_part, 'blob'):
                            images.append({
                                'image_data': image_part.blob,
                                'content_type': image_part.content_type
                            })
                except Exception as e:
                    logger.error(f"Error processing inline shape: {str(e)}")
 
            # Handle floating shapes
            for rel in self.document.part.rels.values():
                try:
                    if "image" in rel.target_part.content_type:
                        self.images.append(rel.target_part)
                except Exception as e:
                    logger.error(f"Error processing relation: {str(e)}")
 
        except Exception as e:
            logger.error(f"Error accessing document: {e}")
 
        logger.info(f"Found {len(images)} images in document")
        return self.images
 
    def remove_empty_tables(self):
        """Remove empty tables from document using the result of get_empty_tables."""
        removed_count = 0
        for table in self.tables:
            table._element.getparent().remove(table._element)
            removed_count += 1
        return removed_count
 
    def remove_images(self):
        """Remove all images from document use self.images."""
        removed_count = 0
        for image in self.images:
            del self.document.part.rels[image.rId]
            removed_count += 1
        return removed_count
 
    def save_new_document(self):
        """Save self.document with new name with prefix cleared_"""
        new_filename = os.path.join(path_str, "media/cleared_document.docx")
        self.document.save(new_filename)
        return new_filename
if __name__ == "__main__":
    print("path:", path_str)
    filename = os.path.join(path_str, "media/worddoc.docx")
    executor = WordEditor(file=filename)
    executor.load_file()
    executor.get_empty_tables()
    executor.get_images()
    executor.remove_empty_tables()
    executor.remove_images()
    executor.save_new_document()
Добавлено через 1 минуту
Одна картинка из примера не удаляется, там похоже битый content-type
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2025, 22:23
Помогаю со студенческими работами здесь

Удалить ненужные строки из файла
Здравствуйте! Простите, если не сюда пишу. Имеется скрипт: @echo off del F:\ftpsait\ftp\torlist.rsc @echo off powershell...

Из файла удалить ненужные пробелы
Нужно сделать программу с такими пунктами: -удаляет ненужные пробелы. Помогите пожалуйста, а то аналоги только со строками но то...

Как изменить размер изображения, вставленного в ячейку таблицы MS Word?
Формирую таблицу с картинками в MS Word из 1С по технологии COM. Столкнулся с тем, что картинка после вставки в ячейку таблицы имеет...

Как с помощью VBA получить значение с ячейки таблицы MS Word в переменую?
Как с помощью VBA получить значение с ячейки таблицы MS Word в переменую. Range(x,y).???

Как удалить из текущую таблицы запись которые просматриваю с помощью курсора?
Кто знает как удалить из текущую таблицы запись которые просматриваю с помощью курсора . напрнимер CREATE PROCEDURE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru