Рандомизация файлов, но с сохранением изначальных имен и расположений

Рейтинг: 0Ответов: 1Опубликовано: 02.07.2023

Помогите пожалуйста, я хочу написать программу, которая будет случайно перемешивать файлы в директории, но с сохранением изначальных имен файлов. Моя задача - перемешать все звуки в игре. У меня есть папка со всеми звуками, но они так-же расположены в разных папках. Каким образом мне перемешать их, при этом сохранив структуру. Как мне собственно подойти ко всему этому?

Ответы

▲ 0Принят

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

Ваша игра использует путь к файлу и он не зависит от сортировки в папке, поэтому :

  1. Для получения всех файлов/папок в директории в python можно использовать os.listdir(), при этом какой-либо порядок файлов не гарантирован и может быть абсолютно произвольным и также зависит от системы. Вы можете получить список файлов в директории, например так:
files = []
for filename in os.listdir(folder_path):
    file_path = os.path.join(folder_path, filename)
    if os.path.isfile(file_path):
        files.append(file_path)

Затем с помощью метода shuffle() из библиотеки random перемешать случайным образом пути к файлам в списке затем уже использовать их.

  1. Возможно действительно нужно случайным образом переименовать файлы, примерно это можно сделать так:
file_list = os.listdir(folder_path) # Список путей к файлам в указанной папке

new_file_list = random.shuffle(file_list) # Перемешанный список с путями

for i, file_path in enumerate(file_list):
    new_file_path = os.path.join(folder_path, os.path.basename(new_file_list[i])) # Объединяем путь к папке и полученное имя файла, имя берем из перемешанного списка 
    os.rename(os.path.join(folder_path, file_path), new_file_path) # Переименовываем файл