• Как создать двойной loop python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    for a,b in zip(aList, bList):
        print(a,b)
    Ответ написан
    1 комментарий
  • Как сделать одинаковый модуль на разные страницы?

    @pavelsha
    Пара уточняющих вопросов:
    Использование CMS-Системы не рассматриваем?
    Сайт содержит только статические страницы и сопутствующие картинки / медиаэлементы?

    Вариант 1.
    SSI
    https://ru.wikipedia.org/wiki/SSI_(%D0%BF%D1%80%D0...
    Хостинг должен поддерживать обработку sHTML.
    ИМХО, минимальный по затратам вариант для реализации.
    Посетители так вообще ничего не заметят даже если полезут смотреть код в браузере.

    Работает, если верстаете страницы локально у себя на рабочем месте.
    Начинает напрягать, если приходится реализовывать пейджинг статей. Как сделать на SSI некоторые вещи, например, фильтрацию или отбор по тегам статей, я не представляю.

    Вариант 2.
    Начинаем писать сайт через генератор статических страниц (MiddleMan, Jekyll, Octopress, Hide...)
    вот обзор про них.
    https://habr.com/ru/company/selectel/blog/236441

    Несколько больше телодвижений для организации рабочего места редактора. НАдо думать как загнать в генератор уже написанные страницы.
    Статья выше старая. Если кто даст информацию по актуальному состоянию или напишет свежий обзор, то я с удовольствием почитаю.

    Вариант 3.
    НАПилить меню на JS или каком-либо фреймворке... Лично я бы не рассматривал.
    ИМХО слишком много усилий для задачи из вопроса Автора. возрастет сложность в поддержке сайта. Сами страницы могут стать неоправданно тяжелыми и медленными.
    Ответ написан
    2 комментария
  • Сортировка файлов по части имени + формат на Python?

    Vindicar
    @Vindicar
    RTFM!
    Можно сделать обобщённое решение. Описываешь функцию преобразования, которая имя файла превращает в относительный путь к файлу.
    from os import path
    
    def get_folder(fname: str) -> str:
        ... # тут будет код
    
    base_folder = r'C:\тут\корневой\каталог\куда\складывать\файлы'
    for file in files: #перебираешь список файлов, у тебя этот код уже есть
        subpath = get_folder(path.basename(file))
        if subpath is None: # если функция вернула None, игнорируем файл
            continue
        source_path = path.abspath(file)
        target_path = path.join(base_folder, subpath)
        # и переносишь/копируешь файл из source_path в target_path


    Хорошо, а как реализовать get_folder()?
    Описываешь имя файла регуляркой, например, такого вида:\w+?(?P<Num>\d+)\.(?P<Ext>\w+)
    Как видим, эта регулярка содержит две именованных захватываемых группы - цифры перед точкой Num, и расширение Ext.
    Если тебе хватит точного совпадения, и не требуется делать что-то вида "файлы с цифрами 000-100 в папку 100", то реализация будет примерно такая:
    import re
    NAME = re.compile(r'\w+?(?P<Num>\d+)\.(?P<Ext>\w+)', re.I)
    TYPES = { #сортировка по типам
        'aac': 'AUDIO',
        'mp4': 'VIDEO',
        'jpg': 'IMAGES',
        None: 'MISC', #всё остальное
    }
    
    def get_folder(fname: str) -> str:
        m = NAME.match(fname) #пусть имя файла anything100.jpg
        if m is None: #имя файла не по шаблону - непонятно что делать с файлом
            return None # или говорим "не трогай файл"
            #return f'{TYPES[None]}/{fname}' # или кидаем в папку для неразобранного
        data = m.groupdict() # data = { 'Num': '100', 'Ext': 'jpg' }
        data['File'] = fname # data = { 'Num': '100', 'Ext': 'jpg', 'File': 'anything100.jpg' }
        data['Type'] = TYPES.get(data['Ext'].lower(), TYPES[None]) # data = { 'Num': '100', 'Ext': 'jpg', 'File': 'anything100.jpg' , 'Type': 'IMAGES' }
        return '{Type}/{Type}{Num}/{File}'.format(**data) # IMAGES/IMAGES100/anything100.jpg

    Дальше подгонишь как тебе надо, меняя реализацию get_folder().
    Ответ написан
    Комментировать