Как массово переименовать html файлы по содержимому тегов?

Друзья, помогите решить задачу.
Есть несколько тысяч .htm файлов, с названиями вида: index-12.htm.
Стоит задача их переименовать по заголовку.
Заголовок внутри этих файлов скрывается между тегами:

<h3 class="header-text">Заголовок</h3>

Как массово извлечь заголовок из тегов и переименовать им файлы?
  • Вопрос задан
  • 964 просмотра
Пригласить эксперта
Ответы на вопрос 3
vawsan
@vawsan
Frontend Developer
Проще всего написать такой скрипт на C#, php.
Если прогать не умеете, можно использовать какой-нибудь ZennoPoster.
Но там тоже придется написать пару регулярок, хотя для не программиста это будет сильно проще, чем писать на чистом языке программирования.
Ответ написан
@x_dmitry_x
# -*- coding: utf-8 -*-

from __future__ import print_function, unicode_literals
import os
from lxml import etree

FILES_DIR = 'Путь/До/Папки/С/Файлами'

def main():
    parser = etree.HTMLParser()
    for fname in os.listdir(FILES_DIR):
        path = os.path.join(FILES_DIR, fname)
        tree = etree.parse(path, parser)
        root = tree.getroot()
        el = root.find('.//h3[@class="header-text"]')
        if el is not None:
            header = el.text
            if not header:
                print(fname, 'Пустой заголовок')
                continue
            new_fname = header.strip() + '.html'
            new_path = os.path.join(FILES_DIR, new_fname)
            try:
                os.rename(path, new_path)
            except Exception as e:
                print(fname, 'Ошибка при переименовании')
                continue
            print(fname, '-->', new_fname)
        else:
            print(fname, 'Заголовок не найден')

if __name__ == '__main__':
    main()
    raw_input('Enter для закрытия...'.encode('cp866')) # Да, я использую windows :(
Ответ написан
lukoie
@lukoie
#!/usr/bin/env bash
for f in *.html;
do
title=$( grep -oP '(?<=).*(?=<\/title>)' "$f" )
mv -i "$f" "${title//[^a-zA-Z0-9\._\- ]}".html
done

для виндовс:
www.den4b.com/products/renamer
bee24678786b.png
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы