Рубрики
Без рубрики

Я люблю писать сценарии, чтобы решить небольшие проблемы

Создание программного обеспечения приятно Но я большой поклонник решения моих маленьких проблем с быстрыми сценариями Python. Теги с Python, сценарием, Bash.

Одной из причин, по которым мне нравится программирование, так это то, что он позволяет мне автоматизировать небольшие и раздражающие вещи, которые в противном случае потребуют бы куча ручной работы.

Вчера я загрузил набор файлов, которые пришли в следующую структуру каталогов внутри ZIP-файла:

- Main Folder
  - Theme A (1)
    - FileA.pdf
    - FileA.txt
    - FileA.jpg
  - Theme B (2)
    - FileB.pdf
    - FileB.txt
    - FileB.jpg
  - Theme C (3)
    ...

Для моего использования в случае случая использования я был заинтересован только в файлах PDF и хотел записать заказ этих файлов, которые были написаны в скобках в папке. Я мог бы вручную перемещать их все в новую папку в искателе, но, поскольку из них было несколько десятка, я открыл мой редактор и начал писать Питона.

import os
import re
import shutil

NUMBER_PATTERN = re.compile(r'\((\d+)\)')

for directory, _, files in os.walk('.'):
    if directory == './Output':
        continue
    for filename in files:
        if not filename.endswith('.pdf'):
            continue

        episode_number = NUMBER_PATTERN.findall(directory)[0]
        path = os.path.join(directory, filename)

        new_filename = f'{episode_number:0>2} - {filename}'
        new_path = os.path.join('Output', new_filename)

        print(f'Copying {path} to {new_path}')
        shutil.copyfile(path, new_path)

Это один запуск скрипта, который опирается на очень специфическую структуру именования и файлов, а также наличие выходной папки. Так что, если что-то не в порядке, это просто ломается.

Это означает, что это не очень удобно, и он, вероятно, не самый лучший, ни самый Pythonic код, который я мог написать. Но поскольку это скрипт, предназначенный для бега раз в этой особой ситуации, я могу восстановиться от ситуаций ошибок вручную.

И это красота этого. Это не должно быть хорошим кодом, он просто должен работать один раз. Это экономит мне много раздражающих ручных копирований и переименования файлов.

В отличие от поиска пищевания хорошего, ремонторуемого и устойчивого к ошибкам кода на работе для производства, эти скрипты позволяют мне получить небольшие победы, просто соскребавшими код вместе.

редактировать Я хочу выделить этот красивый сценарий Bash, который @teroyks Создано В комментариях :

find . -iname "*.pdf" | while read F; do FILE=$(basename "$F"); NR=$(printf "%02d" "$(echo "$F" | sed "s/.*(\(.*\)).*/\1/")"); cp -v "$F" "./Output/$NR - $FILE"; done

Редактировать2 @teroyks Также предоставил нам пример в раковине рыбы:

for f in (find . -iname "*.pdf")
    set file (basename $f)
    set number (string match -r "\((.*)\)" $f)[2]
    set number (printf "%02d" $number)
    cp -v $f "./Output/$number - $file"
end

Оригинал: “https://dev.to/hamatti/i-love-writing-scripts-to-solve-small-problems-462m”