Файлы к уроку:
Ссылки:
Описание
В этом уроке мы извлечем таблицу из документа Microsoft Word docx и запишем ее в файл CSV.
Решение
Сначала импортируем функцию Document из модуля docx и модуль pandas.
# Импортируем модули
from docx import Document
import pandas as pd
Прочитаем документ и извлечем из него таблицы.
# Читаем документ, извлекаем из него таблицы
filename = 't1.docx'
document = Document(filename)
tables = document.tables
Создадим заготовку для HTML документа.
my_document = '''<!DOCTYPE html><html><head>
<title>Таблицы из файла ''' + filename + '''</title>
</head><body>'''
Преобразуем таблицу Word в HTML таблицу.
# Цикл по всем таблицам
for table_idx, table in enumerate(tables):
# Начало таблицы, тэг table
my_table = "<table class='word-table' id='" + filename + "-Table" + str(table_idx) + "'>"
# Цикл по каждому ряду
for row_idx, row in enumerate(table.rows):
# Добавляем тэг tr для ряда
my_row = "<tr>"
# Цикл по каждой ячейке в ряду
for cell in row.cells:
my_cell = ""
for paragraph in cell.paragraphs:
my_cell = my_cell + paragraph.text
if row_idx == 0:
my_row = my_row + "<th>"+my_cell+"</th>"
else:
my_row = my_row + "<td>"+my_cell+"</td>"
# Закочим ряд закрывающим тэгом /tr
my_row = my_row + "</tr>"
# Добавим строку к таблице
my_table = my_table + my_row
# Закончим таблицу закрывающим тэгом table
my_table = my_table + "</table>\n\n"
# Добавляем таблицу в наш HTML документ
my_document = my_document + my_table
# Завершаем HTML документ закрывающими тэгами
my_document = my_document + '</table></body></html>'
Запишем все, что получилось в HTML файл.
# Запишем переменную в html файл
with open("my_document.html", "w") as file:
file.write(my_document)
Прочитаем HTML с помощью pandas.
# Читаем HTML
table_html = pd.read_html(my_document,
header=1)
data = table_html[0]
Удалим лишние столбцы.
# Удаляем лишние столбцы
data = data.drop(['I', 'II', 'III', 'IV', 'В среднем за год'], 1)
Чистим столбец от лишних символов.
# Убираем лишние символы
data.index = data['Unnamed: 0'].astype(str).str[:4].astype(int)
data.index
Выполняем операцию Анпивот.
# Делаем анпивот
data = data.melt(id_vars='Unnamed: 0')
data.columns = ['Год', 'Месяц', 'Ср. номинальная начисленная зарплата']
Запишем результат в CSV.
# Записываем в csv
data.to_csv('salary.csv',
encoding='1251',
sep=';')
Примененные функции
- docx.Document
- enumerate
- open
- pandas.read_html
- pandas.DataFrame.drop
- pandas.DataFrame.astype
- pandas.DataFrame.melt
- pandas.DataFrame.to_csv
Курс Импорт данных в Python
Номер урока | Урок | Описание |
---|---|---|
1 | Python Импорт данных №1. Импорт Excel | Научимся импортировать данные из книг MS Excel в формате xlsx. |
2 | Python Импорт данных №2. Импорт CSV | Научимся импортировать данные из текстовых файлов CSV. |
3 | Python Импорт данных №3. Импорт с веб-сайта (HTML) | Импортируем таблицу с веб-страницы и запишем результат в CSV файл. |
4 | Python Импорт данных №4. Импорт таблиц XML | Научимся импортировать таблицы XML на примере данных с сайта Банка России. |
5 | Python Импорт данных №5. Импорт таблиц из PDF | Научимся импортировать нужные таблицы из PDF файлов, объединять их по вертикали в одну большую таблицу и записывать результат в CSV файл. |
6 | Python Импорт данных №6. Импорт таблиц из Word | Научимся импортировать таблицы из документов MS Word в формате docx. |
7 | Python Импорт данных №7. Импорт таблиц из Word | В этом уроке мы извлечем таблицу из документа Word и запишем ее в файл CSV. Для этого нам понадобится модули python-docx и pandas. |