Работа с Doc и Docx в Python
В результате парсинга электронных писем возникла загвоздка, мой парсер
# -*- coding: utf-8 -*-
import setuptools
import docx
name: str = input ("Введите имя входящего файла: ")
f = open (name, "r") # открываем файл
lines = f.readlines () # читаем его построчно
t1 = lines [6]
t2 = lines [-5]
t3 = lines [-6]
for line in lines:
if line.find ('Информирование') != -1: # то что ищем
t5 = line [0:40] # определяет глубину
print (t5) # выводим на экран проверяем
break
#--------
for line in lines:
if line.find ('НА НР') != -1: # то что ищем
t4 = line [7:40] # определяет глубину
print (t4) # выводим на экран проверяем
break
name1: str = input ("Введите имя исходящего файла: ")
f = open (name1, "w+")
# f.write(str(t1 + "\n" + t2))
f.write ('реквизит верхний// ' + str (t1))
f.write ('реквизит нижний// ' + str (t2))
f.write ('дата// ' + str (t3))
f.write ('\nнанр// ' + str (t4))
f.write ('\n// ' + str (t5))
f.close ()
позволяющий на данный момент вынимать из документов строки и определённые интересующие меня слова с определённой глубиной поиска, не позволяет делать всё то же самое но в файлах Word, как понятно из задачи работать приходится с различными форматами, RTF, DOCX, DOC.
Подскажите как мне это исправить.
Установка библиотеки не помогла выполнял следующие действия
pip install python-docx
добавил в шапку
import docx
В результате выполнения появляется ошибка
Traceback (most recent call last):
File "C:/Users/АБИ/PycharmProjects/pythonProject2/УрСО.py", line 9, in <module>
lines = f.readlines () # читаем его построчно
File "C:\Users\АБИ\AppData\Local\Programs\Python\Python38\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 759: character maps to <undefined>
Помогите разобраться в чём дело
Ответы (1 шт):
f = open (name, "r") и readlines подходят только для работы с текстовыми файлами (которые можно например открыть и прочитать обычным блокнотом или другим простым текстовым редактором), но docx - это не текстовый файл, а по сути zip-архив с xml и другими файлами внутри.
Просто импорт модуля docx не добавляет никакой функциональности в функцию open и методы типа readlines - нельзя просто импортировать какой-то модуль, и думать что весь остальной код волшебным образом под это подстроится. Вам нужно искать примеры конкретно для python-docx, и переделать свой код на их основе.
С чего можно начать - пример последовательного чтения docx по абзацам и вывода на консоль (на основе кода из ответа Read Docx files via python by @todd-vanyo):
import docx
doc = docx.Document('myfile.docx')
for docpara in doc.paragraphs:
print(docpara.text)
Для работы с doc и rtf нужно использовать другие модули, т.к. эти форматы кардинально различаются, и код с использованием этих модулей возможно будет выглядеть совершенно по-другому, чем код для docx.