Есть ли способ, которым я могу пакетно переименовать файлы в папке с пользовательским вводом? - PullRequest
2 голосов
/ 08 мая 2019

Желает, чтобы пользователь вводил переименовывать файлы фотографий, но с изменением суффикса конца.

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

но я наткнулся на загадку, я хочу иметь возможность группового переименования, но разные фотографии показывают разную глубину. Например, я хочу, чтобы фотографии были именами: BH01_0-5m тогда следующая фотография будет названа. BH01_5-10 м

Но я знаю только, как его кодировать, чтобы все получило название BH01_0-5m

Это код, который у меня есть для ввода пользователя:

borehole = raw_input("What type of geotechnical investigation?")
type(borehole)

number = raw_input("What number is this test?")
type(number)

frommetre = raw_input("From what depth (in metres)?")
type(frommetre)

tometre = raw_input("What is the bottom depth(in metres)?")
type(tometre)

name = (borehole+number+"_"+frommetre+"-"+tometre)
print(name)

Я получаю заголовок, который хотел бы получить для первого файла фотографии, но если бы у меня было по 4 фотографии в каждой папке, они в настоящее время переименовывались бы в ту же самую вещь, что и пользовательский ввод. Я надеюсь сделать суффикс последовательным в партиях по 5 метров (0-5, 5-10, 10-15, 15-20, 20-25 и т. Д.).

1 Ответ

3 голосов
/ 08 мая 2019

Я делаю несколько предположений здесь:

  • имя папки - это имя скважины
  • имена файлов для каждой скважины могут отличаться, но при сортировке альфа- по численности, первым будет ближайший к поверхности
  • для всех наборов требуется шаг 5 метров

То, что вы хотите сделать, может быть сделано в двух вложенныхциклы:

  • для всех папок:
  • для всех файлов в каждой папке:
  • переименовывает файл, чтобы соответствовать имени папки и некоторой глубине последовательно

Вот пример:

from pathlib import Path
from shutil import move

root_folder = 'c:\\temp'
for folder in Path(root_folder).iterdir():
    if folder.is_dir():
        startDepth = 0
        step = 5
        for file in Path(folder).iterdir():
            if file.is_file():
                new_name = f'{folder.name}_{str(startDepth).zfill(3)}-{str(startDepth + step).zfill(3)}{file.suffix}'
                print(f'would rename {str(file)} to {str(file.parent / Path(new_name))}')
                # move(str(file), str(file.parent / Path(new_name)))
                startDepth += step

Обратите внимание, что я также добавил .zfill(3) к каждой глубине, так как я думаю, что вы предпочтете такие имена, как BH01_000-005.jpg, BH01_0-5.jpg, так какони будут сортироваться более красиво.

Обратите внимание, что этот скрипт печатает только то, что он будет делать, вы можете просто закомментировать оператор print и удалить символ комментария перед оператором move, и он на самом деле будетпереименовать файлы.

...