У меня есть база данных со следующей структурой:
dataset1
- subject-1
- session-1
- group1
- subject-1_session-1_other-stuff-01.json
- subject-1_session-1_other-stuff-01.txt
- subject-1_session-1_other-stuff-02.json
- subject-1_session-1_other-stuff-02.txt
- group2
- files-i-dont-care-about.bvec
- group3
- subject-1_session-1_other-different-stuff-01.json
- subject-1_session-1_other-different-stuff-01.txt
- subject-1_session-1_other-different-stuff-02.json
- subject-1_session-1_other-different-stuff-02.txt
- session2
- group1
- subject-1_session-2_other-stuff-01.json
- subject-1_session-2_other-stuff-01.txt
- subject-1_session-2_other-stuff-02.json
- subject-1_session-2_other-stuff-02.txt
- group2
- differently-named-files-i-dont-care-about.bvec
- group3
- subject-1_session-2_other-different-stuff-01.bval
- subject-1_session-2_other-different-stuff-01.bvec
- subject-1_session-2_other-different-stuff-02.bval
- subject-1_session-2_other-different-stuff-02.bvac
- subject-2
- ^ etc
Я хочу удалить начало файлов (subject-x_session-x_) и сохранить остальные вещи *. * И другие-разные-материал *. * и так далее.Я использую * здесь как расширение UNIX, но не уверен, смогу ли я использовать это внутри переменной в качестве ввода.Я думаю, что одна проблема заключается в том, что когда скрипт пытается разместить новые имена файлов в правильном каталоге, каталог не динамически направляет к источнику файла.Надеюсь, я все еще могу использовать os.walk (), но похоже, что эта функция извлекает массив сразу и заканчивается, прежде чем я могу вызвать os.rename ().Я думаю, что мне нужно иметь возможность вызывать os.rename () кусочно до завершения os.walk ().В противном случае мне нужно запустить скрипт в каждом конкретном каталоге, чтобы изменить имена, но это большая база данных.Вот с чего я начинаю:
root = /full-path/database/
find = "subject-1"
# ^ ideally this would find any string starting with subject-{any number}_session-{any number} but I'd be happy just to get the explicit string to work
replace_with = ""
list = os.walk(root)
for root, dirs, files in list:
for file in files:
new_filename = file.replace(find, replace_with)
src = os.path.join(root, file)
dst = os.path.join(root, new_filename)
os.rename(src, dst)
print(filename + " renamed to " + new_filename)
Сценарий завершается ошибкой при установке ОС.Переименование () называется.Разумно ли перебирать каталог различной глубины и менять эти файлы за один раз?
Я думаю, что-то вроде функции карты или нескольких циклов for внутри большего, но я столкнулся со стеной..